public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root == null) {
return null;
}
if(root.val == p.val || root.val == q.val) {
return root;
}
if(p.val< root.val && q.val < root.val) {
return lowestCommonAncestor(root.left,p,q);
}
if(p.val > root.val && q.val > root.val) {
return lowestCommonAncestor(root.right,p,q);
}
return root;
}

Time complexity O(log n)