二叉树的最近公共祖先:超清晰图解和详解
创作时间:
作者:
@小白创作中心
二叉树的最近公共祖先:超清晰图解和详解
引用
CSDN
1.
https://blog.csdn.net/Yaoyao2024/article/details/132278792
一、题目
- 二叉树的最近公共祖先
二、题解
注意:祖先是包括自身!
🍊首先要明白,当root为p,q的最近祖先节点(这里假设root不包含pq自身,方便我们分析),只有下面3种情况:
- p,q在root分别存在于root的左右子树中(异侧)——>root即为最近祖先节点
- p, q均在root的左侧——>p/q即为最近祖先节点
- p, q均在root的右侧——>同理
🍊递归函数的定义
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q)
:在以root为根节点的树中找并且返回p和q的最近的祖先节点。
- 终止条件:
- root == null;return null
- root = = p 或者 root = = q,直接返回p/q
- 递推工作:(到这里说明此时p和q要么在此次递归的root的同侧或者异侧)
- left 用于记录在左侧进行寻找公共祖先(这里的递归函数作用就是单纯找q/p节点并且找到就返回的作用了,当然你可以另外写一个找节点的函数,但是没必要,因为定义的递归函数本身就能实现这个功能),right同理
- left和right均为null,说明root的左右都没有p,q,那就不存在公共节点,返回Null(有点扯,按理来说,p,q肯定是存在的,但是特判一下也不亏)
- ⭐left和right均不空,说明在此时递归情况是:p,q在root异侧,那么直接返回root即可
- ⭐left不为空,right为空;right不为空,left为空。直接将不为空的那个返回即可!此时不为空的left/right指向的就是最近祖先节点。
三、代码
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;
}else if(left == null){
return right;
}else if(right == null){
return left;
}else{
return null;
}
}
热门推荐
解析互联网产品分析的三大核心模型,助你突破数据分析困境
菜粕外盘的参考品种是什么?这一品种对内盘交易有何影响?
如何提升推文视觉吸引力的5个关键技巧
中考冲刺复习从四大方面着手有助提分
模拟情感和人类关系:AI数字人的新前沿
公里数小,能否延迟更换机油时间?
扁平足会影响跑步吗?脚型扫描仪的应用
什么是结构化教育?如何在课堂中实施结构化教学?
维生素D3vs维生素D2:谁才是促进钙吸收的“冠军”?
地球自转线速度
热刺爆冷不敌阿尔克马尔 全场仅1次射正惨遭淘汰
安徽中级安全工程师:专业资质认证与职业发展详解
安徽省2025年注册安全工程师报考指南及报名要求
如何使用大模型进行数据分类分级
200亿打造西湖大学:五年科研成果斐然,施一公的教育理想照进现实
人这一辈子,一定要去一趟石河子!
本地生活:规模化还是信息差,服务商的盈利策略分析
社保基金投资策略与风险控制分析
秦皇岛山海关区:长城为题,做好文旅融合文章
如何修复泡沫塑料:方法和技术
公司损益表是什么
王牌战士安卓苹果平台游戏互通性全面解析与深入探讨
租的房子不住怎么办?三种解决方案及优缺点分析
艾灸神阙一个小时可以吗
如何正确对待批评与自我反思
菊花普洱桑叶茶:功效、搭配与饮用指南
如何选择适合自己的眼霜?
自我介绍中应该避免的常见错误和陷阱
项目经理如何把产品做好
学生基本计算技能训练:提高数学能力的关键步骤