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

LeetCode二叉树的公共祖先

题目链接

LeetCode二叉树的公共祖先

 

题目描述 

 

 

 思路解析:

ps:我这里看的是灵神的递归解题思路,我觉得很好理解;

关键思路拆解

  1. 关键思路拆解

    • 终止条件的设计
      当递归遇到null(没找到)或直接遇到p/q时,返回当前节点。这一步的意义是:

      • 若找到pq,则将其向上传递作为 “候选祖先”;
      • 若没找到(返回null),则表示当前子树中没有pq
    • 递归的本质
      算法通过递归深入左右子树,本质是后序遍历:先探索完所有子节点,再通过返回值判断当前节点是否为公共祖先。

    • 公共祖先的判定

      • 若左子树返回非空(找到一个节点),右子树也返回非空(找到另一个节点),说明pq分别在当前节点的两侧,因此当前节点就是最近公共祖先。
      • 若只有左子树返回非空,说明pq都在左子树中,左子树的返回结果就是它们的公共祖先(可能是其中一个节点本身,或更深层的公共祖先)。
      • 同理,若只有右子树返回非空,结果为右子树的返回值。

 

完整代码: 

疑难点: 

:lowestCommonAncestor 函数的返回值是什么意思?

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

:为什么发现当前节点是 p 或者 q 就不再往下递归了?万一下面有 q 或者 p 呢?

:如果下面有 q 或者 p,那么当前节点就是最近公共祖先,直接返回当前节点。如果下面没有 q 和 p,那既然都没有要找的节点了,也不需要递归,直接返回当前节点。

 

示例说明(以普通二叉树为例)

假设有如下二叉树,求p=4q=5的最近公共祖先:

 

  • 递归遍历左子树(5 的子树)时,会找到54,因此左子树返回5
  • 递归遍历右子树(1 的子树)时,未找到54,返回null
  • 因此当前节点3的左子树非空、右子树为空,最终返回左子树的结果5(即45的最近公共祖先是5)。

算法特点

  • 时间复杂度:O (n),其中 n 是二叉树的节点数。每个节点最多被访问一次。
  • 空间复杂度:O (h),其中 h 是二叉树的高度。递归栈的深度取决于树的高度(最坏情况为链状树,h=n)。
  • 适用场景:任意二叉树(无需依赖节点值的大小关系,与二叉搜索树的 LCA 算法不同)。

 

灵神YYDS!!! 

 

 

 

 

 

 

 

 

http://www.lryc.cn/news/596827.html

相关文章:

  • 亚远景-传统功能安全VS AI安全:ISO 8800填补的标准空白与实施难点
  • 漏洞生命周期管理:从发现到防护的全流程方案
  • 基于Python(Django)+MongoDB实现的(Web)新闻采集和订阅系统
  • #C语言——学习攻略:操作符的探索(二)
  • ES6 标签模板:前端框架的灵活利器
  • mongodb的备份和还原(精简)
  • HarmonyOS Flutter Boost完全接入手册:爬完所有坑的实战指南
  • DeepSeek-R1大模型实战:AI编程助手如何提升开发效率
  • JVM、Dalvik、ART区别
  • 用Python实现卷积神经网络(一)
  • 电子电气架构 --- 汽车软件全生命周期
  • Java 堆(优先级队列)
  • 226.翻转二叉树
  • JAVA_EVLEN-面向对象高级二
  • 【C语言进阶】动态内存管理(2)
  • 新手向:Idea的使用技巧
  • 10. isaacsim4.2教程-RTX Lidar 传感器
  • AWS Lambda IoT数据处理异常深度分析:从告警到根因的完整排查之路
  • Vue3 面试题及详细答案120道(61-75 )
  • Python学习:函数的使用
  • webrtc整体架构
  • LeetCode热题100--205
  • Visual Studio中部署PaddleOCRv5 (借助ncnn框架)
  • Flink 状态管理设计详解:StateBackend、State、RocksDB和Namespace
  • 【笔记】Handy Multi-Agent Tutorial 第三章: CAMEL框架简介及实践(实践部分)
  • Redis原理之分布式锁
  • PowerShell自动化核对AD与HR系统账户信息实战指南
  • IDEA202403 超好用设置【持续更新】
  • ZooKeeper在Hadoop中的协同应用:从NameNode选主到分布式锁实现
  • 天津大学陈亚楠教授团队 ACS AEM:焦耳热超快合成非平衡态能源材料——毫秒级制备与跨体系性能突破