二叉树的最近公共祖先:超清晰图解和详解
创作时间:
作者:
@小白创作中心
二叉树的最近公共祖先:超清晰图解和详解
引用
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;
}
}
热门推荐
种植绿色药草时如何预防种植室中的害虫?
改善睡眠质量的10种食物:从燕麦到南瓜,助你安然入睡
牛奶泡燕麦片的功效
如何通过饮食控制预防高血压和高血脂?
范围扩大!医保共济办理指南→
电视剧《北上》开播 接力展现运河百年历史变迁
如何保障家居的通风与采光?这种保障需要怎么做?
世界强化免疫日 | 未病先防,强化免疫
北大青鸟和蓝翔技校哪个好?一文详解两所知名职校的优劣
盲人医疗按摩入医保,有何影响?
高新区、经开区、开发区...这些区和行政有什么区别?一个视频搞懂各种各样的“区”
一文读懂!国家级新区、经济特区、开发区、高新区、自贸区等有何区别?
擦玻璃用什么清洁剂好
混动车怎么保养?
权威解读:生物制剂治疗强直性脊柱炎,这3个指标达标才考虑用
清包工项目完工未收款,收入确认与成本结转详解
清包工方式是什么意思
U盘防泄密专题:防泄密的四种方法,一分钟教你做好U盘的全面防护
肺水肿的常见原因是什么
如何在购车过程中做出明智的选择?这些选择存在哪些潜在风险?
中国人民币跨境贸易使用量创新高,英媒:对俄制裁推动中国摆脱美元
无权代理下的无效合同:如何依法维权?
显示器插电源后出现黑屏?实用解决方案全攻略
数据包络分析法在法律实务中的应用与实例探讨
美托洛尔与糖尿病
跨学科主题学习的教学实践研究
如何规划长途旅行路线?这些路线对旅行体验有何作用?
咽喉痒咳嗽一招搞定
什么是无权代理,无权代理的法律后果如何
过年吃橘子、嗑瓜子、喝饮料……真的会“上火”吗?