Lowest Common Ancestor of a Binary Search Tree
Given a binary search tree (BST), find the lowest common ancestor (LCA) node of two given nodes in the BST. According to the definition of LCA on Wikipedia: "The lowest common ancestor is defined between two nodes `p` and `q` as the lowest node in `T` that has both `p` and `q` as descendants (where we allow a node to be a descendant of itself)."
Examples
Constraints
The number of nodes in the tree is in the range [2, 10^5].-10^9 <= Node.val <= 10^9All Node.val are unique.p != qp and q will exist in the BST.
Approach
Intuition: In a BST, the left subtree contains values smaller than the root, and the right subtree contains values greater. If both `p` and `q` are greater than the root, the LCA must be in the right subtree. If both are smaller, the LCA must be in the left subtree. If one is greater and one is smaller (or one equals the root), then the current node is the LCA. Logic: 1. Initialize a pointer `current` to the root of the tree. 2. Enter a while loop that runs as long as `current` is not null. 3. Check if both `p.val` and `q.val` are greater than `current.val`. If they are, it means both nodes are in the right subtree. Update `current` to `current.right`. 4. Check if both `p.val` and `q.val` are less than `current.val`. If they are, it means both nodes are in the left subtree. Update `current` to `current.left`. 5. If neither of the above conditions is met, it means `p` and `q` are on different sides of `current` (or one of them is equal to `current.val`). This implies `current` is the lowest common ancestor. Return `current`.
Complexity Analysis
This iterative approach achieves O(1) space complexity by avoiding recursion overhead.