美文网首页
二叉树中任意两个节点的最近公共祖先

二叉树中任意两个节点的最近公共祖先

作者: Katakuly | 来源:发表于2018-08-31 22:44 被阅读0次
二叉树.jpg

如上图给定的二叉树,9和2的最近公共祖先是2;8和6的最近公共祖先是1。

class TreeNode{
    public int val;
    public TreeNode left;
    public TreeNode right;
    public TreeNode(int val){
        this.val=val;
    }
}

public class Solution{
    public TreeNode lowestCommonAncestor (TreeNode root,TreeNode node1,TreeNode node2){
        if (root==null || root==node1 || root==node2) {
            return root;
        }
        //采用递归调用的思路,将二叉树分为左子树和右子树分别处理
        //使用递归需要注意两点:
        //1.子问题需与原始问题为同样的问题,且更为简单;2.不能无限制地调用本身,程序必须有出口
        //查看左子树中是否有目标结点,没有为null
        TreeNode left = lowestCommonAncestor(root.left,node1,node2);
        //查看右子树是否有目标节点,没有为null
        TreeNode right = lowestCommonAncestor(root.right, node1, node2);
        //都不为空,说明做右子树都有目标结点,则公共祖先就是本身
        if((left==node1 && right==node2 ) || (left==node2 && right==node1)) { 
            return root;
        }
        return left==null?right:left; 
    }
}

相关文章

  • 二叉树-最近的公共祖先

    已知二叉树,求二叉树中给定的两个节点的最近公共祖先。 最近公共祖先: 两节点v与w的最近公共祖先u,满足在树上最低...

  • 小米-基础算法-最近公共祖先

    给一棵二叉树和二叉树中的两个节点,找到这两个节点的最近公共祖先LCA。两个节点的最近公共祖先,是指两个节点的所有父...

  • 算法—— 最近公共祖先 III

    给一棵二叉树和二叉树中的两个节点,找到这两个节点的最近公共祖先LCA。两个节点的最近公共祖先,是指两个节点的所有父...

  • LintCode 578. 最近公共祖先 III

    题目描述 给一棵二叉树和二叉树中的两个节点,找到这两个节点的最近公共祖先LCA。 两个节点的最近公共祖先,是指两个...

  • 最近公共祖先系列

    最近公共祖先I 描述: 给定一棵二叉树,找到两个节点的最近公共父节点 (LCA)。最近公共祖先是两个节点的公共的祖...

  • lintcode 最近公共祖先

    给定一棵二叉树,找到两个节点的最近公共父节点(LCA)。最近公共祖先是两个节点的公共的祖先节点且具有最大深度。样例...

  • LeeteCode 236.二叉树的最近公共祖先(Lowest

    二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“...

  • leetCode进阶算法题+解析(三十一)

    二叉树的最近公共祖先 题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为...

  • [LeetCode]236. 二叉树的最近公共祖先

    236. 二叉树的最近公共祖先给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义...

  • 【算法】二叉树的最近公共祖先

    给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 最近公共祖先的定义为:“对于有根树 T 的两个节点 p、...

网友评论

      本文标题:二叉树中任意两个节点的最近公共祖先

      本文链接:https://www.haomeiwen.com/subject/udzewftx.html