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

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

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

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”


正文

根据递归的性质,在同一路径上,先遍历到的节点一定是后遍历到的节点的祖宗。

最近公共祖先有两种情况:

  1. 其中一个节点为最近公共祖先
  2. 两个节点所在的路径相交的那个节点为最近公共节点。

下面为代码,由于光是文字不好表达,我在代码块中嵌入注释来解释思路

 func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {
     //找到了或者当前寻找的路径为空,直接返回当前节点,帮助判断
    if root == nil || p == root || q == root {
        return root
    }
     //计算得出当前root的左儿子中是否存在p或者q,如果不存在则返回nil
     //如果存在,则返回p或q
    l := lowestCommonAncestor(root.Left, p, q)
     //同上
    r := lowestCommonAncestor(root.Right, p, q)
     //如果左右儿子都找到了,说明当前节点root就是最近公共祖先
    if l != nil && r != nil {
        return root
    }
     //说明并非左右儿子都找到了p或q,说明p或q其中一个是最近公共祖先
    if l != nil {
        return l
    }
    return r
     //递归传递l或者r,返回最终的答案。
}

http://www.kler.cn/a/554155.html

相关文章:

  • NPM环境搭建指南
  • [笔记.AI]如何判断模型是否通过剪枝、量化、蒸馏生成?
  • 透明DNS策略
  • 【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑲】
  • vue 解决image-conversion图片处理插件压缩后图片底色变黑问题
  • 23种设计模式 - 访问者模式
  • < OS 有关 > Ubuntu 24 SSH 服务器更换端口 in jp/us VPSs
  • 【JavaEE进阶】Spring Boot日志
  • 爬虫抓取数据后如何存储?
  • 以下是MySQL中常见的增删改查语句
  • verilog程序设计及SystemVerilog验证
  • Linux 多进程生产者消费者模型实现
  • OkHttp使用和源码分析学习(一)
  • leetcode day18 移除元素 26+283
  • 438. 找到字符串中所有字母异位词(LeetCode 热题 100)
  • 文件超 100M 推送至 Github 解决方案
  • golang调用deepseekr1
  • 23种设计模式 - 抽象工厂模式
  • Starlink卫星动力学系统仿真建模番外篇3-陀螺仪介绍
  • AI 机器人外呼 —— 开启智能外呼新纪元