二叉树的最近公共祖先
2026年4月18日大约 1 分钟
二叉树的最近公共祖先
使用的方法
递归
解题思路
- 给定一个二叉树和两个节点 p 和 q,我们需要找到它们的最近公共祖先。最近公共祖先是指在树中同时包含 p 和 q 的最低节点。
- 我们可以使用递归来解决这个问题。我们从根节点开始,递归地检查当前节点是否为 p 或 q。如果当前节点是 p 或 q,我们就返回当前节点。
- 接下来,我们递归地检查当前节点的左子树和右子树,看看它们是否包含 p 或 q。如果左子树和右子树都返回非 null 的节点,说明当前节点就是 p 和 q 的最近公共祖先,我们返回当前节点。
- 如果左子树返回非 null 的节点,说明 p 和 q 都在左子树中,我们返回左子树的结果;如果右子树返回非 null 的节点,说明 p 和 q 都在右子树中,我们返回右子树的结果。
- 递归的终止条件是当节点为 null 时,返回 null。当我们找到 p 或 q 时,返回当前节点。最终,我们返回最近公共祖先节点作为结果。
代码实现
/**
* Definition for a binary tree node.
* public 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;
}
}