day147—递归—二叉树的最近公共祖先(LeetCode-236)

题目描述

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

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

示例 1:

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。

示例 2:

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4输出:5解释:节点 5 和节点 4 的最近公共祖先是节点 5 。因为根据定义最近公共祖先节点可以为节点本身。

示例 3:

输入:root = [1,2], p = 1, q = 2输出:1

提示:

  • 树中节点数目在范围[2, 105]内。
  • -109 <= Node.val <= 109
  • 所有Node.val互不相同
  • p != q
  • pq均存在于给定的二叉树中。

解决方案:

这段代码的核心功能是查找二叉树中两个指定节点的最近公共祖先(LCA)(即同时是 p 和 q 的祖先且深度最大的节点),采用「后序递归 + 分治」的思路实现,时间复杂度O(n)n为节点数),空间复杂度O(h)h为树的高度),是该问题的经典最优解法(适用于任意二叉树,不仅限于二叉搜索树)。

核心逻辑

代码的核心是通过后序递归遍历,从叶子节点向上 “回溯”,判断当前节点是否是 p/q 的祖先,并根据左右子树的返回结果确定最近公共祖先:

  1. 递归边界条件
    • 若当前节点root为空,或root等于 p/q 中的任意一个,直接返回root(找到目标节点 / 空节点,终止递归);
  2. 后序递归遍历
    • 递归查找左子树中 p/q 的公共祖先,结果记为l
    • 递归查找右子树中 p/q 的公共祖先,结果记为r
  3. 判断公共祖先
    • lr都不为空(说明 p 和 q 分别在当前节点的左右子树中),则当前节点就是最近公共祖先,返回root
    • 若只有l不为空(说明 p/q 都在左子树中),返回l
    • 若只有r不为空(说明 p/q 都在右子树中),返回r

总结

  1. 核心思路:后序递归回溯,通过左右子树的返回值判断 “p/q 是否分布在当前节点两侧”,两侧分布则当前节点是 LCA,否则递归到子树中找;
  2. 适用场景:无需二叉树是搜索树,适用于任意二叉树的 LCA 查找,是通用性最强的解法;
  3. 效率特点:每个节点仅遍历一次,时间O(n);递归栈空间取决于树的高度,平衡树为O(log n),退化为链表时为O(n)

函数源码:

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(!root || root==p || root==q) return root; TreeNode* l=lowestCommonAncestor(root->left,p,q); TreeNode* r=lowestCommonAncestor(root->right,p,q); if(l && r) return root; if(l) return l; return r; } };

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1179806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

题解:P9353 [JOI 2023 Final] 现代机器 / Modern Machine

感觉很好的题啊。 题意:感觉总结不是很总结地明白,直接看题面吧。 Bitaro 收到了一个 JOI 机器作为生日礼物。 JOI 机器由一个球、\(N\) 个灯光瓷砖和 \(M\) 个按钮组成。灯光瓷砖从 \(1\) 到 \(N\) 编号。当 Bitaro…

12款论文AI工具横向对比:数学建模论文复现效率提升与格式优化方法

还在为论文写作头痛&#xff1f;特别是数学建模的优秀论文复现与排版&#xff0c;时间紧、任务重&#xff0c;AI工具能帮上大忙吗&#xff1f;今天&#xff0c;我们评测10款热门AI论文写作工具&#xff0c;帮你精准筛选最适合的助手。 aibiye&#xff1a;专注于语法润色与结构…

12款论文AI工具横向对比:数学建模论文复现效率提升与格式优化方法

还在为论文写作头痛&#xff1f;特别是数学建模的优秀论文复现与排版&#xff0c;时间紧、任务重&#xff0c;AI工具能帮上大忙吗&#xff1f;今天&#xff0c;我们评测10款热门AI论文写作工具&#xff0c;帮你精准筛选最适合的助手。 aibiye&#xff1a;专注于语法润色与结构…

12款AI论文工具深度分析:数学建模论文快速复现与格式精准调整方案

还在为论文写作头痛&#xff1f;特别是数学建模的优秀论文复现与排版&#xff0c;时间紧、任务重&#xff0c;AI工具能帮上大忙吗&#xff1f;今天&#xff0c;我们评测10款热门AI论文写作工具&#xff0c;帮你精准筛选最适合的助手。 aibiye&#xff1a;专注于语法润色与结构优…

12款AI论文工具深度分析:数学建模论文快速复现与格式精准调整方案

还在为论文写作头痛&#xff1f;特别是数学建模的优秀论文复现与排版&#xff0c;时间紧、任务重&#xff0c;AI工具能帮上大忙吗&#xff1f;今天&#xff0c;我们评测10款热门AI论文写作工具&#xff0c;帮你精准筛选最适合的助手。 aibiye&#xff1a;专注于语法润色与结构优…

XDP与eBPF:Linux网络性能优化实战指南

1.XDP与eBPF&#xff1a;Linux网络性能优化实战指南 掌握 XDP&#xff08;eXpress Data Path&#xff09;和 eBPF&#xff08;extended Berkeley Packet Filter&#xff09;的使用与开发&#xff0c;是深入 Linux 网络、安全、可观测性等领域的重要技能。以下是系统性的学习路…

12款智能论文写作工具全面评测:数学建模论文高效还原与专业排版优化策略

还在为论文写作头痛&#xff1f;特别是数学建模的优秀论文复现与排版&#xff0c;时间紧、任务重&#xff0c;AI工具能帮上大忙吗&#xff1f;今天&#xff0c;我们评测10款热门AI论文写作工具&#xff0c;帮你精准筛选最适合的助手。 aibiye&#xff1a;专注于语法润色与结构…

9D VR体验馆设备多少钱的投资分析与运营策略探讨

9D VR体验馆设备投资成本详解与市场分析 在考虑9D VR体验馆设备的投资成本时&#xff0c;首先需要评估几个关键因素&#xff0c;包括设施建设、设备采购及日常运营等方面。通常&#xff0c;初期投资大约在10万至15万元之间&#xff0c;这包括了VR双人蛋椅、VR魔力互动设备和VR3…

从用户体验到提示工程:架构师分享如何将UX研究方法应用于提示词优化

从用户体验到提示工程:架构师分享如何将UX研究方法应用于提示词优化 关键词 UX研究、提示工程、用户需求、交互设计、AI提示优化、用户旅程地图、Persona 摘要 当我们谈论AI交互时,“提示词”就像一把钥匙——它决定了AI能否听懂你的需求,能否输出符合预期的结果。但现实…

12款智能论文辅助工具评测:数学建模论文精准复现与专业排版优化策略

还在为论文写作头痛&#xff1f;特别是数学建模的优秀论文复现与排版&#xff0c;时间紧、任务重&#xff0c;AI工具能帮上大忙吗&#xff1f;今天&#xff0c;我们评测10款热门AI论文写作工具&#xff0c;帮你精准筛选最适合的助手。 aibiye&#xff1a;专注于语法润色与结构…

12款智能论文辅助软件测评:数学建模论文快速复现与格式精细调整指南

还在为论文写作头痛&#xff1f;特别是数学建模的优秀论文复现与排版&#xff0c;时间紧、任务重&#xff0c;AI工具能帮上大忙吗&#xff1f;今天&#xff0c;我们评测10款热门AI论文写作工具&#xff0c;帮你精准筛选最适合的助手。 aibiye&#xff1a;专注于语法润色与结构优…

基于51/STM32单片机太阳能路灯台灯光伏风能追光光通信无线设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

09-太阳能光伏 基于51/STM32单片机太阳能路灯台灯光伏风能追光可见光通信无线设计 太阳能板风能风机充电管理升压锂电池光敏高亮LEDC51-19 WIFI无线太阳能板充电管理升压锂电池光敏AD转换高亮LEDPWM档位C51-21 蓝牙无线太阳能板充电管理升压锂电池光敏AD转换高亮LEDPWM档位C51-…

12款AI论文工具对比分析:数学建模论文高效重现与专业排版优化策略

还在为论文写作头痛&#xff1f;特别是数学建模的优秀论文复现与排版&#xff0c;时间紧、任务重&#xff0c;AI工具能帮上大忙吗&#xff1f;今天&#xff0c;我们评测10款热门AI论文写作工具&#xff0c;帮你精准筛选最适合的助手。 aibiye&#xff1a;专注于语法润色与结构…

基于51/STM32单片机老人防跌智能拐杖GSM短信北斗定位地图无线设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

15-跌倒报警拐杖 基于51/STM32单片机老人防跌智能拐杖GSM短信北斗定位地图无线设计 跌倒状态检测蜂鸣器报警C51-13 蓝牙无线跌倒状态检测蜂鸣器报警C51-14 GSM短信远程心率DS1302时钟校时监控状态LCD1602液晶按键C51-105 GSM短信远程跌倒状态检测蜂鸣器报警灯指示按键防误报号码…

12款智能写作助手评测:数学建模论文精准复现与格式优化完整方案

AI工具已成为数学建模论文写作的高效助手&#xff0c;尤其在复现优秀论文和精准排版方面表现突出。本次评测聚焦10款热门AI写作工具&#xff0c;从代码生成、公式编辑到排版优化进行深度对比&#xff0c;帮助研究者快速匹配最适合的解决方案&#xff0c;显著提升学术产出效率。…

12款AI论文写作软件深度测评:数学建模论文高效还原与排版优化技巧

还在为数学建模论文的复现和排版焦头烂额&#xff1f;AI工具能高效解决时间紧迫、任务繁重的问题。本文深度评测10款热门AI论文写作工具&#xff0c;从代码生成、公式排版到逻辑优化&#xff0c;助你快速匹配最适合的智能助手&#xff0c;轻松攻克学术难关。 aibiye&#xff1…

基于51/STM32单片机智能台灯灯光控制PWM调光语音识别坐姿设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

51-C01-人走灯灭AD采集自动手动10档调节坐姿监测蜂鸣器OLED屏(无线方式选择) 51-C01N无无线-无APP板: 51-C01B蓝牙无线-APP版: 51-C01W-WIFI无线-APP版: 51-C01CAN-视频监控WIFI无线-APP版: 产品功能描述&#xff1a; 本系统由STC89C52单片机最小系统电路、OLED液晶显示、&…

两步实现在ThinkLink平台上的告警功能

1. 功能概述 ThinkLink 的告警通知功能是基于平台强大的 RPC (Remote Procedure Call) 机制 实现的。通过将告警逻辑封装在触发联动模型中&#xff0c;平台能够根据设备上报的数据实时判断是否达到告警条件&#xff0c;并调用预设的 alarm 类型 RPC 消息&#xff0c;实现告警的…

Windows 11 + WSL2 + vLLM 本地部署 Qwen3 8B AWQ 指南

Windows 11 WSL2 vLLM 本地部署 Qwen3 8B AWQ 指南 目录 系统要求环境准备WSL2 Ubuntu 安装配置NVIDIA 驱动配置CUDA 环境安装Python 环境搭建vLLM 安装Qwen3 8B AWQ 模型下载&#xff08;国内加速&#xff09;启动 vLLM 服务API 测试验证常见问题解决性能优化建议 系统要求…

导师严选!专科生必看8款AI论文平台测评

导师严选&#xff01;专科生必看8款AI论文平台测评 2026年专科生论文写作工具测评&#xff1a;为何需要这份榜单&#xff1f; 随着AI技术在学术领域的广泛应用&#xff0c;越来越多的专科生开始借助AI平台提升论文写作效率。然而&#xff0c;面对市场上五花八门的AI论文工具&am…