二叉树---最近公共父节点(LCA)

题目:

      给定一棵二叉树,找到两个节点的最近公共父节点(LCA)。

     最近公共祖先是两个节点的公共的祖先节点且具有最大深度。

 

  4
 / \
3   7
   / \
  5   6

LCA(3, 5) = 4

LCA(5, 6) = 7

LCA(6, 7) = 7

 

Java代码:

 public TreeNode lowestCommonAncestor(TreeNode root, TreeNode A, TreeNode B) {
        // write your code here
        if(root == null||root == A||root == B){
            return root;
        }
        //分而
        TreeNode left = lowestCommonAncestor(root.left, A, B);//这里主要用来找根节点子树是否有A或B节点;因为有可能A或B在一侧或者各自在一侧,这是都有可能的。
        TreeNode right = lowestCommonAncestor(root.right, A, B);
        //治之
        if(left!=null&&right!=null){   //如果这个节点不是A或B的话就返回该节点,然后继续往下搜索
            return root;
        }
        if(left!=null){
            return left;
        }
        if(right != null){
            return right;
        }
        return null;
    }

 

posted @ 2017-07-15 16:11  JunLiu37  阅读(2430)  评论(0编辑  收藏  举报