235. Lowest Common Ancestor of a Binary Search Tree
Last updated
Last updated
/**
* Time complexity : O(N), where N is the number of nodes in the BST.
* In the worst case we might be visiting all the nodes of the BST.
* Space complexity : O(N). This is because the maximum amount of space
* utilized by the recursion stack would be N since the height of a
* skewed BST could be N.
*/
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root == null) {
return null;
}
if(root.val > Math.max(p.val, q.val)) {
return lowestCommonAncestor(root.left, p, q);
} else if(root.val < Math.min(p.val, q.val)) {
return lowestCommonAncestor(root.right, p, q);
}
return root;
}
}/**
* Time complexity : O(N), where N is the number of nodes in the BST.
* In the worst case we might be visiting all the nodes of the BST.
* Space complexity : O(1).
*/
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
// Value of p
int pVal = p.val;
// Value of q;
int qVal = q.val;
// Start from the root node of the tree
TreeNode node = root;
// Traverse the tree
while (node != null) {
// Value of ancestor/parent node.
int parentVal = node.val;
if (pVal > parentVal && qVal > parentVal) {
// If both p and q are greater than parent
node = node.right;
} else if (pVal < parentVal && qVal < parentVal) {
// If both p and q are lesser than parent
node = node.left;
} else {
// We have found the split point, i.e. the LCA node.
return node;
}
}
return null;
}
}