0236 Lowest Common Ancestor of a Binary Tree#
Problem#
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.
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#
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.
Example 2:
Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
Output: 5
Explanation: The LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself according to the LCA definition.
Example 3:
Input: root = [1,2], p = 1, q = 2
Output: 1
Analysis#
Typical binary tree or binary search tree problem:
traversal or recursion as subproblem: for this problem, it seems we cannot get the results if we just traverse the tree once. Then we divide the problem into subproblems and do recursion.
subproblem:
for each node, what should know first??
if
por/andqare in the subtrees
for each node, what to do??
if
pandqare in different subtrees (left and right), then root is an ancestorif
pandqare in the same subtree (left or right), then the node of the subtree is an ancestorif root is
porq, and both nodes are in the subtree, then root is an ancestorotherwise,
p,qare not in subtree, no ancestor in current subtree
for each node, when to do it??
we need pass subtree information, it is easy to use post-order.