二叉树的最近公共祖先:超清晰图解和详解
创作时间:
作者:
@小白创作中心
二叉树的最近公共祖先:超清晰图解和详解
引用
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;
}
}
热门推荐
中国田协发布大众田径健身技术等级标准,优化场地中长跑标准更科学人性化
田径中的DNS究竟代表了什么含义?
避免跑步受伤,专家推荐5个跑步前动态伸展动作!5分钟提升运动表现
美调查组负责人:肯尼迪遇刺案“枪手有两人”
缓解支气管平滑肌痉挛的药物
喉咙发烫有灼烧感怎么回事
柑橘疮痂病的综合防治方法
详解聚红皮和田玉籽料原石的特点与鉴别方法
和田玉名字的由来与寓意:历史、县份及文化传承
如何制备光学显微镜的样品
前端性能监控指标数据
皮肤病的中医外治法包括哪些?中医如何调理皮肤问题
老公沉迷游戏是否可以离婚
如何理解黄金在工业和科技中的应用?这种应用如何推动行业发展?
金的密度是多少kg/m3
春游江淮 | 即刻出发!快收藏家门口的赏花胜地
MP3格式的320kbps和192kbps是什么意思?
Nature Medicine:I型糖尿病的治疗突破:司美格鲁肽能否成为新选择?
养肾常见的5个“误区”,很多人第1个就错了,早了解早规避
2025年未来十年最有前景的行业(附最好就业的十大专业)
曰:藐姑射之山,有神人居焉。
遗照摆放的最佳三个位置:尊重、传统与个人喜好的完美结合
干法电极工艺解析
软件研发和QA团队如何实现有效沟通?
木瓜的成熟和上市时间(了解木瓜成熟和上市的时间节点)
东皇太一:中国古代神话中的至高神祇
对抗冬季,肌肉僵硬的必要伸展运动
为何眼袋会脱皮
雅砻江流域大型滑坡分布规律及成因机制研究
《2025年未来就业报告》:技术变革与技能升级重塑全球劳动力市场