Lowest Common Ancestor of a BST – Solution & Complexity

1. Recognize the Pattern

The key pattern is: BST ordering identifies where search paths split. Identify the state and invariant before coding.

2. Build the Algorithm

Advance one state transition at a time. Mark or update state before exploring dependent work.

3. Check Edge Cases

Test empty or minimal input, skewed shapes, duplicates where allowed, and impossible outcomes.

4. Solution and Complexity

Time: O(h). Space: O(1).

def lowest_common_ancestor(root: TreeNode, p: int, q: int) -> int:
    low, high = min(p, q), max(p, q)
    node = root
    while node.val < low or node.val > high:
        node = node.right if node.val < low else node.left
    return node.val

FAQ