二叉树的最近公共祖先:超清晰图解和详解
创作时间:
作者:
@小白创作中心
二叉树的最近公共祖先:超清晰图解和详解
引用
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;
}
}
热门推荐
加拿大邮编是什么
白破疫苗是什么作用
上海交大发现:不吃酱油和味精的人,血压马上就降低了?真的吗?
如何实现居住空间的高效利用?这种利用如何适应生活需求?
C语言如何限制变量赋值范围
如何评估房产的性价比与投资价值?这种评估如何为购房者提供理性建议?
从概率上来讲,人类有没有可能是银河系甚至全宇宙唯一智慧文明?
新增多款产品具备牵引资质的皮卡有哪些?
笑的时候面部肌肉会发抖不自然是怎么回事
探秘孔亚:历史、文化与自然交织的土耳其瑰宝
科学家用电刺激强制人微笑,却发现他们更开心了
八字算命中的“财生官”:含义、格局与命运解读
【以案释法】拒接电话、拒收文书,摆烂式诉讼有用吗?法院送达方式了解一下
中国风网站设计思路
传统文化与国风元素赋能中国冰雪运动
手机和电脑之间传输文件的五种方法
岗位胜任力维度总揽:功能、技能、知识、态度
期货交易中的委托价格选择:市价委托 vs 限价委托
后脑痛以及后脑神经麻木
一文详解M.2、NGFF、mSATA、NVMe等接口技术
王蒙《诗词中国》:一场跨越时空的诗意对话
如何分析PMI对黄金价格的影响因素?这种分析对黄金投资有何指导?
帕梅拉和跳绳谁更燃脂
物业合同纠纷中的合同变更
智能炒菜机与人工烹饪的差异
日元汇率的变化和影响是什么?这种变化如何进行分析和应对?
报考规培医生报名条件是什么?
机械、电气、气压、液压4大传动方式对比,动图完美展示
如何培养一个有主见的孩子?家长不妨试试这几个方法,很管用!
浏览器缓存怎么清理?清除浏览器缓存的几种方法详解