二叉树的最近公共祖先
2024年8月11日约 349 字大约 1 分钟
二叉树的最近公共祖先
题意
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
思路
递归 + 分类讨论:

代码
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
// 只要当前根节点是p和q中的任意一个,就返回(因为不能比这个更深了,再深p和q中的一个就没了)
if (root == null || root == p || root == q)
return root;
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
// 如果left 和 right都不为空,说明此时root就是最近公共节点
// 如果left为空,right不为空,就返回right,说明目标节点是通过right返回的,反之亦然。
if (left == null) return right;
if (right == null) return left;
return root;
}
}