当前位置: 首页 > backend >正文

Day119 | 灵神 | 二叉树 | 二叉树的最近共公共祖先

Day119 | 灵神 | 二叉树 | 二叉树的最近共公共祖先

236.二叉树的最近共公共祖先

236. 二叉树的最近公共祖先 - 力扣(LeetCode)

思路:

二叉树的最近公共祖先【基础算法精讲 12】_哔哩哔哩_bilibili

首先我们采用后序遍历

递归函数返回值是问是「最近公共祖先的候选项」。对于最外层的递归调用者来说,返回值是最近公共祖先的意思。但是,在递归过程中,返回值可能是最近公共祖先,也可能是空节点(表示子树内没找到任何有用信息)、节点 p 或者节点 q(可能成为最近公共祖先,或者用来辅助判断上面的某个节点是否为最近公共祖先)。

image-20250517211000204

1.当前节点的是空节点

那就返回空

2.当前结点是p或者q,直接返回当前结点就行

比如5是p,4是q,那么我们遍历到5就直接返回5就行,因为5是5和4的最近公共祖先

image-20250517211126456

3.如果左右子树都有的话,也就是pq分别在这当前结点的左右子树,那么最近公共祖先就是当前结点

image-20250517211231874

4.如果只在左子树中找到了q或者p,那说明最近公共祖先肯定在左子树,返回遍历左子树的结果就行

右子树是同理的

image-20250517211324399

5.当前结点的左右子树都没找到p或者q,那说明在其他的子树

返回nullptr

完整代码:

class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {//1.当前结点为空或者q或者p,返回当前结点if(root==nullptr || root==p || root==q)return root;TreeNode *l=lowestCommonAncestor(root->left,p,q);TreeNode *r=lowestCommonAncestor(root->right,p,q);//2.左右子树中分别找到了p或者qif(l!=nullptr&&r!=nullptr)return root;//3.p和q全在右子树中else if(l==nullptr&&r!=nullptr)return r;//4.p和q全在左子树中else if(l!=nullptr&&r==nullptr)return l;//5.q和p不在当前子树elsereturn nullptr;}
};
http://www.xdnf.cn/news/6919.html

相关文章:

  • C43-指针与数组
  • [已解决] LaTeX “Unicode character“ 报错 (中文字符处理)
  • MySQL高可用架构
  • 深入解析Spring Boot与Spring Security的集成实践
  • 游戏详情制作(Navigation组件)
  • 语音合成终身免费畅用![特殊字符] 紧急提醒:禁用更新锁死权限!
  • 电脑桌面便签软件哪个好用?好用便签Windows版下载推荐
  • 大麦(Hordeum vulgare)中 BAHD 超家族酰基转移酶-文献精读129
  • 关于Android Studio for Platform的使用记录
  • 2025最新的软件测试面试大全(含答案+文档)
  • 系统架构设计(十):结构化编程
  • Linux线程同步信号量
  • hbuilderX 安装Prettier格式化代码
  • 哈希的原理、实现
  • 如何通过交流沟通实现闭环思考模式不断实现自身强效赋能-250517
  • 解决“没有找到有效的sudoers资源,退出”
  • 系分论文《论系统需求分析方法及应用》
  • 【通用智能体】Search Tools:Open Deep Research 项目实战指南
  • Python的re模块:正则表达式处理的魔法棒
  • DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
  • 单细胞转录组(1)
  • 【51】快速获取数码管段选表(含小数点)及字母表的工具(分享)
  • 局部放大maya的视图HUD文字大小的方法
  • 五、xlib绘制按钮控件
  • DeepSeek-R1 Supervised finetuning and reinforcement learning (SFT + RL)
  • 怎么在excel单元格1-5行中在原来内容前面加上固定一个字?
  • NVMe简介6之PCIe事务层
  • HTTP与HTTPS协议的核心区别
  • Linux调试生成核心存储文件
  • React Hooks 必须在组件最顶层调用的原因解析