76.树中两个结点的最低公共祖先

给出一个二叉树,输入两个树节点,求它们的最低公共祖先。

一个树节点的祖先节点包括它本身。

注意:

  • 输入的二叉树不为空;
  • 输入的两个节点一定不为空,且是二叉树中的节点;

数据范围:

树中节点数量 [0,500]。

样例:

二叉树[8, 12, 2, null, null, 6, 4, null, null, null, null]如下图所示:
image
1.如果输入的树节点为2和12,则输出的最低公共祖先为树节点8。
2.如果输入的树节点为2和6,则输出的最低公共祖先为树节点2。

代码:

/**
 * 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) {
        // 如果当前节点为空或等于p/q,直接返回当前节点
        if(root == null || root == p || root == q) return root;
        // 递归在左子树中查找p/q
        TreeNode left = lowestCommonAncestor(root.left, p, q);
        // 递归在右子树中查找p/q
        TreeNode right = lowestCommonAncestor(root.right, p, q);
        // 如果左右子树都找到了节点,说明当前root就是LCA
        if(left!=null&&right!=null)return root;
        // 如果只有右子树找到,返回右子树的结果
        // 如果只有左子树找到,返回左子树的结果
        return left!=null ? left:right;
    }
}
posted @ 2025-06-02 13:11  回忆、少年  阅读(13)  评论(0)    收藏  举报