当前位置: 首页 > news >正文

剑指offer-81、⼆叉搜索树的最近公共祖先

题⽬描述

给定⼀个⼆叉搜索树, 找到该树中两个指定节点的最近公共祖先。

  1. 对于该题的最近的公共祖先定义:对于有根树T的两个结点p 、q ,最近公共祖先LCA(T,p,q)表示⼀个结点x ,满⾜x 是p 和q 的祖先且x 的深度尽可能⼤。在这⾥,⼀个节点也可以是它⾃⼰的祖先.
  2. ⼆叉搜索树是若它的左⼦树不空,则左⼦树上所有结点的值均⼩于它的根结点的值; 若它的右⼦树不空,则右⼦树上所有结点的值均⼤于它的根结点的值
  3. 所有节点的值都是唯⼀的。
  4. p 、q 为不同节点且均存在于给定的⼆叉搜索树中。

如果给定以下搜索⼆叉树: {7,1,12,0,4,11,14,#,#,3,5} ,如下图:

示例1
输⼊: {7,1,12,0,4,11,14,#,#,3,5},1,12
输出: 7
说明:节点1 和 节点12的最近公共祖先是7

示例2:
输⼊: {7,1,12,0,4,11,14,#,#,3,5},12,11
输出: 12
说明:因为⼀个节点也可以是它⾃⼰的祖先.所以输出12

思路及解答

迭代遍历

二叉搜索树(BST)的特性,通过迭代查找公共祖先,根据节点值大小关系,决定向左子树或右子树查找

public class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root == null) return null;TreeNode current = root;while (current != null) {// 如果p和q的值都小于当前节点,LCA在左子树if (p.val < current.val && q.val < current.val) {current = current.left;} // 如果p和q的值都大于当前节点,LCA在右子树else if (p.val > current.val && q.val > current.val) {current = current.right;} // 否则当前节点就是LCAelse {return current;}}return null; // 未找到}
}
  • 时间复杂度:O(h),h为树高,平均O(log n),最坏O(n)
  • 空间复杂度:O(1),只使用常数空间

递归遍历

递归判断节点值关系,决定向左或右递归查找

题⽬已经保证了,两个节点 p , q 都在树上,我们取出根节点 7 ,假设⼩于 7 ,则在左⼦树,如果⼤于7 ,则在右⼦树。

需要查找的两个节点,但凡有⼀个等于根节点,它们的⽗节点就是根节点,因为⼀个节点的⽗节点可以是⾃身(题⽬有说明)。

如果⼀个⼤于根节点,⼀个⼩于更节点,其最近公共祖先也是根节点。如果两个都⼤于,或者两个都⼩于,怎么办?

当然是递归,如果两个都⼩于,那么就取当前的左⼦树进⾏递归,直到符合要求。⽐如查找,3 和 5,由于 3 和 5 都⼩于 7,那么取左⼦树 1 下⾯的进⾏递归:

class TreeNode {int val = 0;TreeNode left = null;TreeNode right = null;public TreeNode(int val) {this.val = val;}
}
public class Solution68 {public int lowestCommonAncestor(TreeNode root, int p, int q) {TreeNode result = commonAncestor(root, p, q);return result == null ? -1 : result.val;}public TreeNode commonAncestor(TreeNode root, int p, int q) {// 等于空if (root == null) {return null;}if (root.val == p || root.val == q) {// 有⼀个值等于根节点return root;}// 在左⼦树if (p < root.val && q < root.val) {return commonAncestor(root.left, p, q);} else if (p > root.val && q > root.val) {// 两个都在右⼦树return commonAncestor(root.right, p, q);} else {return root;}}
}
  • 时间复杂度:O(h),递归深度为树高
  • 空间复杂度:O(h),递归调用栈空间

通用二叉树

假设这道题条件改⼀下,如果不是⼆叉搜索树,怎么办?

如果不是⼆叉搜索树,那么我们不能直接判断出它在左⼦树,还是在右⼦树。不如暴⼒点,先在左⼦树中找,如果右⼦树没找到,说明都在左⼦树,如果左⼦树没找到,说明都在右⼦树,如果两个都分别存在,说明当前节点就是他们的⽗节点。

public class Solution68 {public int lowestCommonAncestor(TreeNode root, int p, int q) {TreeNode result = commonAncestor(root, p, q);return result == null ? -1 : result.val;}public TreeNode commonAncestor(TreeNode root, int p, int q) {if (null == root) {return null;}if (root.val == p || root.val == q) {return root;}TreeNode left = commonAncestor(root.left, p, q);TreeNode right = commonAncestor(root.right, p, q);if (left == null) {return right;} else if (right == null) {return left;} else {return root;}}
}
  • 时间复杂度:O(n),需要遍历整个树
  • 空间复杂度:O(h),递归栈深度
http://www.jsqmd.com/news/445548/

相关文章:

  • 2026年OM - 5烟囱防腐涂料,聊聊哪家口碑好且性价比高 - myqiye
  • 苹果更新MacBook Air,存储升级价格涨
  • 2026年靠谱的二轴破碎机厂家推荐:对轴破碎机厂家选购参考建议 - 行业平台推荐
  • 任务解构引擎:基于Awesome-Dify-Workflow的复杂任务效能提升方案
  • 2026年口碑好的钢丝网骨架厂家推荐:湖北钢丝网骨架管/钢丝网骨架复合管行业内口碑厂家推荐 - 行业平台推荐
  • Mac新系统引不满,降级攻略来了
  • 2026年评价高的企业微信ERP品牌推荐:企业微信财务软件服务口碑推荐平台 - 行业平台推荐
  • 定制化材料试验设备优质厂家推荐指南 - 优质品牌商家
  • 2026年比较好的烟酒展柜品牌推荐:烤漆展柜/化妆品展柜/电子产品展柜厂家推荐参考 - 行业平台推荐
  • 2026年热门的钢丝网骨架管品牌推荐:河北钢丝网骨架管/钢丝网骨架塑料复合管厂家推荐与选购指南 - 行业平台推荐
  • 2026年比较好的企业微信品牌推荐:企业微信ERP/企业微信CRM系统/企业微信财务软件企业精选推荐生产商 - 行业平台推荐
  • 大件物流如何选?2026年口碑物流公司大揭秘,大件运输/大件物流,大件物流服务商排行 - 品牌推荐师
  • 基于Java的宠物领养管理网站系统设计与实现源码+运行步骤+计算机技术
  • 5个维度掌握HidLibrary:.NET HID设备通信实战指南
  • ExifToolGui高效管理照片元数据全攻略:从混乱到有序的实用指南
  • 绍鼎密封市场口碑如何,和其他品牌相比优势在哪? - mypinpai
  • 2026抗折抗压试验机优质厂家推荐指南:导线疲劳试验系统、微机伺服液压万能试验机、微机控制万能试验机选择指南 - 优质品牌商家
  • 推荐好用的砂磨机品牌,勤业化机产品特色有哪些? - 工业品牌热点
  • 5个强化步骤:全面解锁Koikatsu Sunshine游戏体验
  • 2026年评价高的西安展柜品牌推荐:连锁店展柜/化妆品展柜/电子产品展柜厂家推荐与选择指南 - 行业平台推荐
  • 2026年江苏大口径内衬不锈钢复合管老牌厂家排名,哪家性价比高? - 工业推荐榜
  • python+AI协同过滤算法的个性化推荐饮食分享平台
  • 建筑轻工冶金铝瓦优质厂家推荐及价格参考 - 优质品牌商家
  • 靠谱的传媒艺考培训机构怎么选购,艺升艺考有啥优势? - myqiye
  • 3步解锁电子课本高效下载:tchMaterial-parser让教育资源获取效率提升90%的秘密
  • 探讨2026年第三方物流公司推荐,华夏通物流服务值得选吗? - 工业品网
  • 2026擦窗机器人油封供应商哪家口碑好,绍鼎密封全国服务受认可 - mypinpai
  • 细聊2026年消防培训退役军人优惠学费减免政策,靠谱机构有哪些 - 工业推荐榜
  • 2026年南京净化车间回收正规供应商排名,宝乐瑞物资回收上榜 - 工业设备
  • 2026年口碑好的余热品牌推荐:工业余热回收/余热回收利用/余热技术节能改造公司口碑哪家靠谱 - 行业平台推荐