二叉树的最近公共祖先:超清晰图解和详解
创作时间:
作者:
@小白创作中心
二叉树的最近公共祖先:超清晰图解和详解
引用
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;
}
}
热门推荐
退休审批表填写指南:22个栏目的详细说明
这些症状出现 请及时就医
身份证有效期怎么填写
方块呼吸法是什么?三分钟学会自我照顾、减压的实用策略
陈来:宋代理学概说
华为2024年度拟分红723亿 近五年研发超7900亿
西门子PLC与NPN、PNP传感器接线方式,超全讲解!
国际物流运费价格表:影响因素、构成及获取方式全解析
胸腔积液的发病原因有哪些
胸腔积液X线、超声、CT检测,一文总结!│临床必备
怎么查自己的商标有没有侵权
如何查询商标侵权
黄芩的功效作用与现代应用
髋关节滑膜炎用什么药疗效好
德甲第25轮前瞻:基尔状态回暖迎战斯图加特,升班马能否主场爆冷?
占比78%!知名交易平台,山寨币交易量暴涨
进气系统漏气什么症状?
C语言如何避免野指针
江苏车牌ABCDEF的排列规则是什么
商家帮忙解除限速,“想骑多快骑多快” :如何刹住电动自行车“狂飙”?
眼前总有黑影飞来飞去,是怎么回事?
办公软件怎么调成中文版
FIA:F1摩纳哥大奖赛将强制两停,以提高比赛观赏性
一次搞懂18K金、18K白金、18K玫瑰金的区别
天哪!原来尿不湿和拉拉裤差别这么大!
如何预防后背长痘?
无名指与食指长度差异背后的科学与心理学解析
缺钙了不一定非要吃钙片!真正补钙的四种食物,一定要多吃
仙本那旅游最佳时间是几月?
发现仙本那:顶级岛屿跳岛和节日指南