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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树---最近公共父节点(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;
    }

 

以上是关于二叉树---最近公共父节点(LCA)的主要内容,如果未能解决你的问题,请参考以下文章

二叉树最近公共祖先

二叉树练习题3-最近公共祖先

LintCode 最近公共祖先

寻找二叉树中的最低公共祖先结点----LCA(Lowest Common Ancestor )问题(递归)

最近公共祖先 LCA 递归非递归

在二叉树中找到两个节点最近公共祖先