1. 题目
2. 思路
(1) 递归
- 递归函数的返回值为包含p或q的结点。
- 若根结点的左子树不包含p和q,则p和q必然存在于右子树中;若根结点的右子树不包含p和q,则p和q必然存在于左子树中;若根结点的左右子树都包含p或q,则返回根结点即可。
3. 代码
public class Test {
public static void main(String[] args) {
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (root == null || root == p || root == q) {
return root;
}
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
if (left == null) {
return right;
}
if (right == null) {
return left;
}
return root;
}
}