题目链接

68.1 二叉查找树

题目链接

Leetcode

解题思路

在二叉查找树中,两个节点 p, q 的公共祖先 root 满足 root.val >= p.val && root.val <= q.val。

class Solution {
   
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
   
        if (root.val>p.val && root.val>q.val) return lowestCommonAncestor(root.left, p, q);
        else if (root.val<p.val && root.val<q.val) return lowestCommonAncestor(root.right, p, q);
        else return root;
    }
}

68.2 普通二叉树

题目链接

Leetcode

解题思路

在左右子树中查找是否存在 p 或者 q,如果 p 和 q 分别在两个子树中,那么就说明根节点就是最低公共祖先。

class Solution {
   
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
   
        if (root==null || root==p || root==q) return root;
        TreeNode l = lowestCommonAncestor(root.left, p, q);
        TreeNode r = lowestCommonAncestor(root.right, p, q);
        if (l!=null && r!=null) return root;
        return l==null? r: l;
    }
}