二叉树的最近公共祖先:超清晰图解和详解
创作时间:
作者:
@小白创作中心
二叉树的最近公共祖先:超清晰图解和详解
引用
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;
}
}
热门推荐
怎么培养学生良好的学习习惯呢
《剑来》:贺小凉的天资与情缘
科普|牡丹药用在根皮
日本弥生时代与中国历史的对应:一段跨文化交流的探索
大富翁游戏规则详解:从入门到精通
美味又简单——肉丸意大利面的制作方法(香气扑鼻)
黑曜石貔貅佩戴方法及其寓意介绍 黑曜石貔貅有什么禁忌和效果
深圳旅游攻略:主题公园、自然景观、海滩、历史文化景点全推荐
中国历史上各朝代状元之最
温馨提示:家长朋友们,脊髓灰质炎灭活疫苗补种工作正在进行中!!!
胸椎脊髓肿瘤导致的疼痛应服用何种药物
医生同胞们,痛苦无比的夜班该怎么熬
ISFJ-T型人格男生特点有哪些?ISFJ-T型人格男生性格解析!
房屋拆迁评估方法与流程详解
高压灭菌锅的维护保养要点
降温了!如何正确进行冬季户外运动?
海南各大动物园详细介绍与指南:门票、开放时间及特色亮点全解析
如何开展短租业务?这种业务模式对房东和租客有何影响?
什么是有效的分时K线图分析方法?分时K线图在交易中的应用有哪些?
以犯罪学理论剖析柯南:从犯罪心理学角度解读其行为模式
伦铜与锰硅之间存在怎样的关联?这种关联对相关产业有何影响?
什么人适合喝夏桑菊 夏桑菊的禁忌人群有哪些
学区房的购买策略与投资价值如何?有哪些值得关注的因素?
危险化学品包括什么? 涨知识啦!危险化学品的定义与分类
中国科学家揭示合成生物细菌肿瘤疗法关键原理
接收文件后,如何表示感谢以体现礼仪
华为耳机连不上手机?这几个步骤轻松搞定
晒被子后有"太阳味",是因为螨虫被烤焦了?其实是太阳的功劳
佩戴金龙吊坠的寓意和象征
如何进行除法运算并解决相关问题?这种运算有哪些技巧?