首页 > 其他分享 >二叉搜索树的最近公共祖先

二叉搜索树的最近公共祖先

时间:2023-01-10 22:00:46浏览次数:46  
标签:val 祖先 二叉 搜索 root 节点

题目描述

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
1.对于该题的最近的公共祖先定义:对于有根树T的两个节点p、q,最近公共祖先LCA(T,p,q)表示一个节点x,满足x是p和q的祖先且x的深度尽可能大。在这里,一个节点也可以是它自己的祖先.
2.二叉搜索树是若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值
3.所有节点的值都是唯一的。
4.p、q 为不同节点且均存在于给定的二叉搜索树中

二叉搜索树的最近公共祖先

思路分析

给定两个值,判断它的最近公共祖先。因为是二叉搜索树,也就是说root.left的所有值都小于root,右侧的值都大于右侧。我们可以从他们的大小关系上入手,考虑使用递归
那么递归退出条件如何判定,也就是p和q分别处于当前节点的左侧和右侧,或者说其中有一个节点刚好等于当前的root就返回,那么就可以很快的得到答案

代码参考

const lowestCommonAncestor = function (root, p, q) {
  if (root == null)
    return null
  // 如果两个值都小于根节点,说明祖先在左子树一侧
  if (p < root.val && q < root.val)
    return lowestCommonAncestor(root.left, p, q)
  // 如果两个值都大于根节点,说明祖先在右子树一侧
  else if (p > root.val && q > root.val)
    return lowestCommonAncestor(root.right, p, q)
  //否则,在两个值中间,或者等于其中一个值
  else
    return root.val
}
···

标签:val,祖先,二叉,搜索,root,节点
From: https://www.cnblogs.com/zx529/p/17041479.html

相关文章

  • 二叉树
    1.二叉树的概念二叉树是n个有限元素的集合,该集合或为空、或由一个根节点及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为......
  • Google黑语法搜索
    site:搜索指定域名site:edu.cninurl:xxx搜索url中包含的内容inurl:login.jspintext:xxx文本中包含的内容intext:中国filetype:pdf"入党申请"filetype:pdfintitl......
  • Mac 下 PyCharm 全局搜索(查找)快捷键
    Mac下PyCharm全局搜索(查找)快捷键如下。1快捷键快捷键command⌘ + shift + F如果是当前文件范围内的搜索,那快捷键如下:command⌘ + F......
  • 代码随想录day14 LeetCode 144.二叉树的前序遍历 145.二叉树的后序遍历 94.二叉树的中
    144.二叉树的前序遍历classSolution{public:vector<int>v;vector<int>preorderTraversal(TreeNode*root){if(root==NULL)returnv;......
  • Linux 搜索所有文件内容截取所需记录
    由于一些需求需要,遍历某目录先所有文件,找出某行的关键信息。如:搜索所有 jsp 文件的内容,找出"spring:message"所在行,并取引号内的字符串。(如下图,取粉色框中的字符串)第一步,......
  • Educational Codeforces Round 114 D(搜索剪枝)
    D.TheStrongestBuild题目大意:给定n个位置,每个位置有c\({_i}\)个可选能力值(能力值升序给出即a\({_1}\)<a\({_2}\)<a\({_3}\)<...<a\({_{ci}}\)),你可以在每个......
  • 力扣102 二叉树的层序遍历(广度优先搜索)
    题目:给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。示例:输入:root=[3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]思......
  • 力扣226 翻转二叉树
    题目:给你一棵二叉树的根节点root,翻转这棵二叉树,并返回其根节点。示例:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1] ......
  • 判断是不是平衡二叉树
    题目描述输入一棵节点数为n二叉树,判断该二叉树是否是平衡二叉树。在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树平衡二叉树(BalancedBinaryTree),具有以......
  • 判断是不是完全二叉树
    题目要求给定一个二叉树,确定他是否是一个完全二叉树。完全二叉树的定义:若二叉树的深度为h,除第h层外,其它各层的结点数都达到最大个数,第h层所有的叶子结点都连续集中......