When we get this problem, we need to confirm the following 2 questions:

1. Can root, p or q be null? (No)

2. Are both p and q in the tree (No, either p or q mignt not in the tree), this is the only difference with 236. Lowest Common Ancestor of a Binary Tree

3. Can p be equal to q? (No)

    boolean meetp, meetq;
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        TreeNode node = helper(root, p, q);
        if(meetp&&meetq)
            return node;
        else
            return null;
    }
    
    private TreeNode helper(TreeNode root, TreeNode p, TreeNode q){
        if(root==null)
            return null;
        if(root==p)
            meetp = true;
        if(root==q)
            meetq = true;
        TreeNode left = helper(root.left, p,q);
        TreeNode right = helper(root.right, p, q);
        if(left!=null&&right!=null||root==p||root== q) //since we need to traverse the whole tree, "root==p||root==q" is moved to here
            return root;
        if(left==null)
            return right;
        else
            return left;
    }

 

posted on 2022-02-08 07:36  阳光明媚的菲越  阅读(19)  评论(0编辑  收藏  举报