美文网首页算法
二叉树的公共祖先

二叉树的公共祖先

作者: 小鱼嘻嘻 | 来源:发表于2020-10-27 10:27 被阅读0次

问题1

平衡二叉树的公共祖先,找到该树中两个指定节点的最近公共祖先

原理

  • 首先需要了解平衡二叉树的特性,平衡二叉树的左子树的节点值小于根节点的值,平衡二叉树的右子树的节点值大于根节点。
  • 判断p,q和root的关系,如果root>p&&root>q说明应该递归遍历左子树;如果p<root&&q<root 说明应该递归遍历右子树,否则就是当前root节点。

代码

class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        if(root==null){
            return null;
        }
        if(root.val>p.val&&root.val>q.val){
            return lowestCommonAncestor(root.left,p,q);
        }
        if(root.val<p.val&&root.val<q.val){
            return lowestCommonAncestor(root.right,p,q);
        }
        return root;
    }
}

注意事项

  • root<p&&root<q 和root>p&&root>q 这两个都是且的关系

问题2

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

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

原理

  • 递归找左子树,递归找右子树
  • 左子树为空,返回右子树;右子树为空返回左子树;左右子树都不为空,返回当前节点
  • 递归的终止条件,当前节点为空,或者当前节点等于p或者当前节点等于q

代码

class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
       if(root==null||root==p||root==q){
           return root;
       }
       TreeNode left = lowestCommonAncestor(root.left,p,q);
       TreeNode right = lowestCommonAncestor(root.right,p,q);
       if(left!=null&&right!=null){
           return root;
       }
       return left==null?right:left;
    }
}

注意事项

  • 递归的终止条件:当前节点为空,或者当前节点等于p或者当前节点等于q

相关文章

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

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

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

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

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

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

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

    236. 二叉树的最近公共祖先 来源: 236. 二叉树的最近公共祖先 1. 题目描述 给定一个二叉树, 找到该...

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

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

  • 树的相关算法

    二叉树的最近公共祖先 顺序结构的二叉树的公共祖先 二叉树的所有路径 翻转一棵二叉树||交换左右子树 给定一个二叉树...

  • 二叉树的公共祖先

    问题1 平衡二叉树的公共祖先,找到该树中两个指定节点的最近公共祖先 原理 首先需要了解平衡二叉树的特性,平衡二叉树...

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

    题目链接: 236. 二叉树的最近公共祖先 题目描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 ...

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

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

  • 二叉树的最近公共祖先

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

网友评论

    本文标题:二叉树的公共祖先

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