Lowest Common Ancestor of a Binary Tree
Lowest Common Ancestor of a Binary Tree
TreesDFS
Problem Statement
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. The lowest common ancestor is defined between two nodes p
and q
as the lowest node in the tree that has both p
and q
as descendants.
Example
Example 1:
Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
Output: 3
Explanation: The LCA of nodes 5 and 1 is 3.
Solution (Recursive DFS)
The problem can be solved efficiently using a recursive Depth-First Search. The core idea is to traverse the tree and, for each node, determine if it's the LCA.
A node is the LCA if either it is one of the target nodes (p
or q
), or if one target is in its left subtree and the other is in its right subtree.
Algorithm Steps
- Create a recursive function `find(node, p, q)`.
- Base Case: If `node` is null, or if `node` is `p` or `q`, return `node`.
- Recursively call `find` on the left and right children.
- If the left recursive call returns a non-null node and the right call also returns a non-null node, it means `p` and `q` were found in different subtrees. Therefore, the current `node` is the LCA. Return `node`.
- If only one of the recursive calls returns a non-null node, it means both `p` and `q` are in that subtree. Propagate that non-null value up the call stack.
- If both calls return null, neither `p` nor `q` were found in the subtrees of the current `node`. Return null.
Visiting node 3.
Lowest Common Ancestor Solution