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

【每天学习一点算法 2026/05/18】二叉树的最近公共祖先

每天学习一点算法 2026/05/18

题目:二叉树的最近公共祖先

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

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

要找两个指定节点的最近公共祖先,就需要先遍历树找到指定节点所在路径,他们路径相遇节点就是我们要找的最近公共祖先,我们可以利用后序遍历,先访问左右子节点再访问根节点,遇到指定节点就往一级回归传递当前层级节点,如果某一条路径没有指定节点就回归传递 null,当回归到某一层时,左右递归接收到的回归值都不为 null 时,此时的根节点就是指定节点的最近公共祖先。

/** * Definition for a binary tree node. * class TreeNode { * val: number * left: TreeNode | null * right: TreeNode | null * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } * } */functionlowestCommonAncestor(root:TreeNode|null,p:TreeNode|null,q:TreeNode|null):TreeNode|null{if(root==p||root==q||!root)returnroot// 遇到指定节点返回当前节点,当前路径走到尽头返回 nullconstleft=lowestCommonAncestor(root.left,p,q)// 递归访问左侧子树,获取路径返回值constright=lowestCommonAncestor(root.right,p,q)// 递归访问右侧子树,获取路径返回值letres=null// 用于存储当前层级回归返回值if(left&&right){// 如果左右路径返回值都有值,表示当前 root 就是最近公共祖先res=root}else{// 左右路径返回值有一个为 null,继续回归判断res=left||right}returnres};

题目来源:力扣(LeetCode)

http://www.jsqmd.com/news/841746/

相关文章:

  • CircuitPython微控制器图形保存实战:从屏幕截图到BMP文件生成
  • 基于Arduino与NeoPixel的无人机UFO光束特效制作全攻略
  • Ubuntu20.04下Cartographer从零部署到实战建图导航
  • DeepSeek V4 追平Opus:7倍便宜差0.2%,我替你测了
  • 使用Nodejs快速将Taotoken大模型API集成到你的Web应用中
  • ArcGIS Pro二次开发:地图图层管理的10个高频代码片段(附避坑指南)
  • Python数据类型:类class、反射dataclasses、functools、typing、pydantic
  • 开源大模型垂直应用:基于OpenClaude构建法律AI助手的技术实践
  • 开源AI对话模型本地部署指南:从架构设计到性能优化
  • 基于AWTK与AWPLC的嵌入式走马灯:零代码图形化开发实践
  • 嵌入式测试学习第 14 天:数字电路基础:高低电平、0和1、逻辑电平
  • 避开安全门调试大坑:详解西门子SFDOOR指令的3个关键参数与常见故障复位
  • TVA在证券K线形态分析中的创新应用(10)
  • 【NotebookLM脑机接口前沿突破】:2024年谷歌实验室未公开技术路径与神经解码精度提升37%的关键证据
  • 本地Cookie导出终极指南:Get cookies.txt LOCALLY浏览器扩展完全解析
  • ▲基于4FSK调制解调+LDPC编译码+扩频解扩通信链路matlab误码率仿真
  • VirtualWife项目解析:基于LLM与向量数据库构建可记忆AI伴侣的工程实践
  • QMCDecode:3步解锁QQ音乐加密音频的终极Mac解决方案
  • Taotoken账单追溯功能如何帮助厘清项目间的AI资源消耗
  • AI-7D-SATS 平台的架构选型:为什么选择“Workflow + Multi-Agent“的混合架构?
  • YOLOv8实战:构建实时跌倒预警监控系统
  • Qualia ESP32-S3开发指南:分层架构与settings.toml配置实践
  • 微信自动化框架copaw-wechat:基于UI自动化的机器人开发实战
  • TVA系统100毫秒实时推理四大核心技术
  • 终极免费开源项目管理指南:如何用GanttProject高效规划复杂项目?
  • 春秋云境Time靶场实战:从Neo4j漏洞到域控沦陷的完整攻击链剖析
  • 质性数据处理太慢?NotebookLM+NVivo双引擎协同方案,效率提升3.8倍,仅限首批200名研究者获取
  • 操作系统资源合集
  • 测试0998y测试0998y测试0998y测试0998y
  • 【软考高级架构】论文范文19——论软件系统架构风格