剑指 Offer 68 - II. 二叉树的最近公共祖先

剑指 Offer 68 - II. 二叉树的最近公共祖先

可以理解为寻找节点p或q,找到就返回。
如果在左子树中没有找到p或q,那说明最近公共祖先在右子树。
如果在右子树中没有找到p或q,那说明最近公共祖先在做子树。
如果左右子树分别找到了p或q,那说明最近公共祖先就是root。

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;
    }
}

你可能感兴趣的:(#,剑指offer,算法)