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

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,返回最终的答案。
}

相关文章:

  • jetbrains IDEA集成大语言模型
  • java练习(32)
  • [Qt] 使用QUndoStack运行到cmd->isObsolete()崩溃
  • 【Axure 模版素材】数据可视化驾驶舱+图表素材 - AxureMost
  • numpy(02 数据类型和数据类型转换)
  • “深入浅出”系列之C++:(22)asio库
  • 服务器部署基于Deepseek的检索增强知识库
  • 嵌入式硬件篇---常用的汇编语言指令
  • Mini-Omni2
  • java防抖,防止表单重复提交,aop注解形式
  • deepseek帮我设计物理量采集单片机口保护电路方案
  • 什么是Baklib云内容中台?
  • chrome V3插件开发,调用 chrome.action.setIcon,提示路径找不到
  • 操作系统2.4
  • 虚拟环境下Python调用C++开发的dll如何联调?一文解答!(Python开发环境PyCharm,C++开发环境Visual Studio)
  • Python JSON的深度解析:从基础到应用
  • 【用deepseek实现快递查询】快递物流查询-快递查询-快递查询-快递物流查询-快递物流轨迹查询-快递物流查询接口-快递查询-快递物流查询
  • Flask实现高效日志记录模块
  • DeepSeek与ChatGPT:AI语言模型的全面技术解析与对比
  • linux进程间通信的posix消息队列应用记录
  • “80后”北京市东城区副区长王智勇获公示拟任区委常委
  • 在稳市场稳预期下,投资者教育给了散户更多底气
  • 中信银行:拟出资100亿元全资设立信银金融资产投资有限公司
  • 国家主席习近平同普京总统举行大范围会谈
  • 美国与胡塞武装达成停火协议,美伊相向而行?
  • 奥迪4S店内揭车衣时遭“连环车损”,双方因赔偿分歧陷僵局