[程序员代码面试指南]二叉树问题-找到二叉树中两节点最近公共祖先

题解

法一:后序遍历。搞清返回值逻辑。

todo

更新别的方法

法一代码

public class Parent {
    public static void main(String args[]) {
        Node n1=new Node(1);
        Node n2=new Node(2);
        Node n3=new Node(3);
        Node n4=new Node(4);
        n1.left=n2;
        n1.right=n3;
        n3.left=n4;
        System.out.print(firstParent(n1,n3,n4).val);
    }
    
    public static Node firstParent(Node root,Node node1,Node node2) {
        if(root==null||root==node1||root==node2) {
            return root;
        }
        Node leftNode=firstParent(root.left,node1,node2);
        Node rightNode=firstParent(root.right,node1,node2);
        if(leftNode!=null&&rightNode!=null) {
            return root;
        }
        if(leftNode==null&&rightNode==null) {
            return null;
        }
        else {
            return leftNode!=null?leftNode:rightNode;
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/coding-gaga/p/11013646.html