Lowest Common Ancestor III

public class Solution {
    /*
     * @param root: The root of the binary tree.
     * @param A: A TreeNode
     * @param B: A TreeNode
     * @return: Return the LCA of the two nodes.
     */
     
    class resultType{
        boolean A, B;
        TreeNode LCA;
        resultType(boolean A, boolean B, TreeNode LCA){
            this.A = A;
            this.B = B;
            this.LCA = LCA;
        }
    }
    public TreeNode lowestCommonAncestor3(TreeNode root, TreeNode A, TreeNode B) {
        // write your code here
        
        
        resultType res = find(root, A, B);
        TreeNode LCA = res.LCA;
        return LCA;
    }
    
    private resultType find(TreeNode root, TreeNode A, TreeNode B){
        resultType res = new resultType(false, false, null);
        if(root == null){
            return res ;
        }
        
        resultType left = find(root.left, A, B);
        resultType right = find(root.right, A, B);
        
        if(left.LCA != null){
            res.LCA = left.LCA;
            return res;
        }
        
        if(right.LCA != null){
            res.LCA = right.LCA;
            return res;
        }
        
        
        res.A = left.A | right.A | root == A;
        res.B = left.B | right.B | root == B;
        
        
        if(res.A && res.B ){
            res.LCA = root;
            return res;
        }
    
        return res;
    }
}

最后更新于

这有帮助吗?