二叉树的最近公共祖先:超清晰图解和详解
创作时间:
作者:
@小白创作中心
二叉树的最近公共祖先:超清晰图解和详解
引用
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;
}
}
热门推荐
武汉理工大学是211大学吗?
医院处理医疗纠纷困难案例:挑战与应对
如何通过科技提升生活品质:平衡效率与享受的艺术
2025年春节档票房破60亿!广州热门场次“一票难求”
滑石粉有什么功效和作用
排骨烧烤腌制配方
如何制定团队激励制度
这4种不提倡的家庭氛围易影响孩子心理健康!
泰国的冬天温度是多少
Meta-Chunking:基于LLM的文本分块优化方法
单手开车到底安全吗?为啥老司机都喜欢这样,你平常都咋开?
川牛膝与怀牛膝的区别
季绝尘:《绝世唐门》中的剑痴
哪些检查需要空腹
电脑屏幕出现一条条细细的线,四种方法恢复正常显示
九大经典logo设计案例赏析:从谷歌到沃尔玛的品牌符号演变
STM32CubeMX配置串口发送和接收中断详解
Excel库存表自动预警功能详解:三种实现方法与案例分析
企业安全意识培训工作方案
马术运动走进寻常百姓家 南昌“00后”“10后”爱上马术课
怎么种花生品质好产量高?
专业测试治具在不同应用领域中的作用
工厂如何推行条形码管理
成长路上必读书籍:点亮人生的灯塔
建好充电基础设施 让新能源汽车跑得更远
太阳能热水器的工作原理及维修方法详解
椎管狭窄症的治疗方法有哪些
华山旅游全攻略,解锁奇险之旅
在线咨询客服工具如何提升客户体验
如何正确连接交换机与网线