二叉树的最近公共祖先(力扣236)

leetcode 236. 二叉树的最近公共祖先 在递归函数有返回值的情况下:如果要搜索一条边,递归函数返回值不为空的时候,立刻返回,如果搜索整个树,直接用一个变量left、right接住返回值,这个left、right后序还有逻辑处理的需要,也就是后序遍历中处理中间节点的逻辑(也是回溯)。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。解释:节点 5 和节点 1 的最近公共祖先是节点 3。 阅读详情

解题思路:想法当然是从下往上记,如果碰到了就返回,那么很明显就要用后序遍历来做,递归三部曲:确定函数返回值已经参数,确定终止条件,确定单层递归的逻辑。(还是有些困惑)

具体代码如下:

class Solution {

public:

      TreeNode*travel(TreeNode* root, TreeNode* p, TreeNode* q){

        if(root==NULL)return NULL;

        if(root==p||root==q)return root;//终止条件

        TreeNode*Left=travel(root->left,p,q);

        TreeNode*Right=travel(root->right,p,q);

        if(Left!=NULL&&Right!=NULL)return root;

         if(Left!=NULL&&Right==NULL)return Left;

        else if(Left==NULL&&Right!=NULL)return Right;

          else return NULL;

        }

    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {

      TreeNode*result=travel(root,p,q);

        return result;

    }

};

具体题目如下:

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

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

LeetCode 236:二叉树的最近公共祖先 特别说明: 输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 输出:5 解释:节点 5 和节点 4 的最近公共祖先是节点 5 。因为根据定义最近公共祖先节点可以为节点本身。 解题思路:   一般二叉树相关的算法题,都可以使用递归这个编程技巧来解题,本题也不例外。 分析:2个节点存在的位置,不外乎以下4种情况: 要么都在左子树上 要么都在右子树上 要么一个在左,一个在右 至少有一个不在这颗二叉树... 阅读详情

相关推荐

LeetCode——236,二叉树的最近公共祖先

/** * \* Created: liuhuichao * \* Date: 2019/8/27 * \* Time: 27:30 PM * \* Description: 二叉树的最近公共祖先 * \ * 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 * <p> * 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为...

我们的征途是星辰大海 585

236. 二叉树的最近公共祖先 - 力扣[LeetCode]

最近公共祖先问题

曾几何时的博客 817

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

weixin_41678956的博客 8658

【中等】力扣算法题解析LeetCode236:二叉树的最近公共祖先

本文介绍了如何通过递归深度优先搜索(DFS)在二叉树中查找两个节点的最近公共祖先(LCA)。核心思路是利用后序遍历自底向上搜索,递归终止条件为当前节点为空或找到目标节点。若左右子树均含目标节点,当前节点即为LCA;否则返回非空子树结果。

ylumwd的博客 723

【CAN通讯系列18】- NM在干什么?休眠唤醒

同时针对不同休眠或唤醒场景,网管报文的userdata有所区别,如何做到场景与网管报文内容一一映射,通常会定义另一帧报文,用来表明当前是哪个或哪几个唤醒条件或休眠条件满足。又或者如果用户发现汽车电量不充足了,那么会有充电需求,插枪充电,这时如果插上慢充枪,那么OBC会先被唤醒,识别出插枪行为及其慢充枪的连接状态,然后OBC唤醒BMS和其他相关的控制器进行充电。也就是说,通过对一个又一个整车功能和应用场景的详细分析,最终能够汇总出整车所有的休眠唤醒场景需求,通常会用一个表格来管理,俗称休眠唤醒表。

menghuyouyou的博客 1169

Agent框架系列:1-低代码智能体平台深度解析Dify、Coze、n8n

Dify、Coze 和 n8n 是三大主流低代码智能体平台,各有侧重。Dify 适合企业级 AI 应用,具备强大的 RAG 和知识库管理能力,技术栈为 Python + React。Coze 由字节推出,主打零代码和快速原型开发,集成 60+ 插件,极适合非技术用户。n8n 以工作流自动化和系统集成为核心,支持 400+ 外部应用,基于 Node.js + Vue,扩展性极强。选择建议:非技术团队选 Coze,AI 应用选 Dify,复杂自动化与集成选 n8n。可根据实际需求混合使用,最大化平台优势。

3086

236. 二叉树的最近公共祖先【 力扣(LeetCode) 】

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

yyh520025的博客 863

操作系统实验四 进程运行轨迹的跟踪与统计(哈工大李治军)

实验4 进程运行轨迹的跟踪与统计 实验目的 掌握 Linux 下的多进程编程技术; 通过对进程运行轨迹的跟踪来形象化进程的概念; 在进程运行轨迹跟踪的基础上进行相应的数据统计,从而能对进程调度算法进行实际的量化评价,更进一步加深对调度和调度算法的理解,获得能在实际操作系统上对调度算法进行实验数据对比的直接经验。 实验内容 进程从创建(Linux 下调用 fork())到结束的整个过程就是进程的生命期,进程在其生命期中的运行轨迹实际上就表现为进程状态的多次切换,如进程创建以后会成为就绪态;当该进程被调度以

leoabcd12的博客 4654

【算法】力扣236. 二叉树的最近公共祖先

给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。在这个博客中,我们通过递归的方式解决了寻找二叉树中两个节点的最近公共祖先的问题。希望这篇博客对您有帮助。解释:节点 5 和节点 4 的最近公共祖先是节点 5。因为根据定义最近公共祖先节点可以为节点本身。解释:节点 5 和节点 1 的最近公共祖先是节点 3。

未来就在脚下。 994

AEJoy —— 表达式之仅限在某一维摆动【JS】

效果图 wiggle() 的作用仅限于水平方向 想法 wiggle() 确实是一个非常方便的工具,但有时您希望对它有更多的控制。在本例中,我们希望仅将摆动限制在水平方向。 设计 要理解 wiggle() 最重要的一点是,它生成的结果与应用它的属性具有相同的维度。例如,如果你将 wiggle() 应用于 3D 层的 position 属性,结果将是一个由三个元素组成的数组(x、y 和 z 各一个)。我们需要做的就是将 wiggle() 的结果捕捉到一个变量(我们称之为 “w” ),然后从这个变量中提取我们想

ShaderJoy 的兴趣技术杂货铺 2095

规控面试常见问题

规划控制算法常见问题。

每天进步一点点。 984

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

5:如果递归到一棵树的左右子树都为空,并且依旧还没找到,就说明这个结点root绝对不是目标结点的公共路径,所以要将这个结点出栈.并返回false.b : 当得到两个结点的祖先路径,我们要将保存两个结点中祖先路径较长的栈出栈,直到和另一个栈的路径长度相等.( 出栈的结点一定没有公共祖先).输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4。

清欢Allen的技术博客 1311

GPU硬件架构与微架构深度解析34-GPU安全架构深度解析

现代GPU不仅是图形处理器,更是高性能计算平台,安全架构设计至关重要。内存加密- 保护数据在传输和存储时的安全安全启动- 确保固件和软件的完整性隔离机制- 防止不同应用间的数据泄露密钥管理- 安全存储和处理加密密钥。

2301_79143213的博客 100

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

Leetcode 236. 二叉树的最近公共祖先1、问题分析2、问题解决3、总结 1、问题分析 题目链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/   本质上就是一个二叉树的遍历问题。代码我已经进行了详细的注释,理解应该没有问题,读者可以作为参考,如果看不懂(可以多看几遍),欢迎留言哦!我看到会解答一下。 2、问题解决   笔者以C++方式解决。 #include "iostream" using n

珍惜 8761

RT-DETR改进策略【Conv和Transformer】| ICCV-2023 iRMB 倒置残差移动块 轻量化的注意力模块

本文记录的是利用模块优化的目标检测网络模型。的作用在于克服了常见模块无法同时吸收CNN 效率建模局部特征和利用Transformer 动态建模能力学习长距离交互的问题。相比一些复杂结构或多个混合模块的方法,能更好地权衡模型成本和精度。本文将其用于的模型改进和二次创新,更好地突出重要特征,提升模型性能。Rethinking Mobile Block for Efficient Attention-based Models从微观角度看,由和组成。及其改进的实现代码如下: 四、创新模块 4.1 改进点1⭐ 模块

Limiiiing的博客 816

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

普通二叉树 —— 最近公共祖先问题解析(Leetcode 236)

本文解析了如何在普通二叉树中寻找两个节点的最近公共祖先(LCA)。与二叉搜索树不同,普通二叉树没有节点值的有序性,因此需要采用后序遍历加递归回溯的方法。核心思路是:若当前节点是目标节点之一或左右子树均找到目标节点,则当前节点即为LCA。文章通过图示和代码示例(Java实现)详细解释了这一过程,时间复杂度为O(n),空间复杂度为O(h)。该方法是解决树结构问题的常见递归套路,适用于更广泛的二叉树相关问题。

业精于勤,荒于嬉 1306

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

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

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

Love Peace 900

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

力扣(LeetCode)236.二叉树的最近公共祖先

236. 二叉树的最近公共祖先 问题 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root =[3,5,1,6,2,0,8,null,null,7,4] 示例 1: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 输出:

Ackerman2的博客 254

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

题目: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。 思路:递归 若 root 是 p, q的 最近公共祖先 ,则只可能为以下情况之一: 1.p和 q在 root 的子树中,且分列 root 的 异侧(即分别在左、右子树中); 2.p = root ,且 q在 root 的左或右子...

m0_67227632的博客 155

LeetCode236- 二叉树的最近公共祖先

LeetCode236- 二叉树的最近公共祖先 最近全国疫情严重,待在家里没事干,马上又要准备春招了,最近刷刷题,记录一下!再说一句,武汉加油,大家出门记得戴口罩! 1、题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可...

sk18192449347的博客 248

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

🚅【leetcode】236. 二叉树的最近公共祖先🚀题目💥leetcode代码模板🚀思路💻代码🍪总结 🚀题目 leetcode原题链接 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 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

laplacepoisson的博客 944

leetcode题解236:二叉树的最近公共祖先

本题要求找出二叉树中两个节点的最近公共祖先(LCA)。采用递归解法:若当前节点为空或等于p/q则直接返回;否则递归检查左右子树。当左右子树均返回非空时,当前节点即为LCA;若仅一侧非空,则返回该侧结果。时间复杂度O(n),空间复杂度O(h),其中h为树高。关键点在于通过后序遍历自底向上判断节点关系,利用递归天然的回溯特性定位LCA。

2301_80548884的博客 671

力扣236题详解:二叉树的最近公共祖先的多种解法与模拟面试

本文详细解读了力扣第236题“二叉树的最近公共祖先”,通过递归法高效地查找普通二叉树中两个节点的最近公共祖先,并提供了详细的解释和模拟面试问答。希望读者通过本文的学习,能够在力扣刷题的过程中更加得心应手。

10年数据\经营分析经验,现任大厂数据分析负责人 1865

力扣(LeetCode)236. 二叉树的最近公共祖先(C语言)

【墨染】 递归。结点世界大战(结点感染)。

墨染 1658

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

【摘要】本文讲解LeetCode 236题"二叉树的最近公共祖先"的解题思路。通过递归遍历二叉树,判断左右子树是否包含目标节点p或q,分为两种情况处理:1)当p、q不在同一路径时,公共祖先需满足左右子树都包含目标节点;2)当p、q在同一路径时,公共祖先可能是节点本身且子树包含另一个目标节点。采用深度优先搜索(DFS)方法,定义全局变量记录结果,最终返回最近公共祖先节点。该解法时间复杂度为O(n),空间复杂度为O(n)。

心动的那一刻,记忆便盛开了花 882

LeetCode第236题_二叉树的最近公共祖先

本文介绍了LeetCode第236题"二叉树的最近公共祖先"的解题方法。题目要求在一棵普通二叉树中找到两个指定节点的最近公共祖先。文章提供了两种解决方案:递归法和迭代法。递归法通过深度优先搜索,根据左右子树搜索结果判断公共祖先;迭代法使用哈希表存储父节点信息,通过回溯比较寻找公共祖先。两种方法的时间复杂度均为O(n),空间复杂度为O(h)或O(n)。代码实现提供了C#、Python和C++三种语言的版本,适用于不同技术背景的开发者。

qq_40263592的博客 1277
上一篇: 二叉搜索树的众数(力扣501)
下一篇: 二叉搜索树最近的公共先祖(力扣235)
奉常席梦雨
博客等级 码龄3年 444粉丝 74原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值