算法-二叉树篇21-二叉树的最近公共祖先

二叉树两个节点的公共祖先 描述 给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1和o2,请找到 o1和o2的最近公共祖先节点。 注:本题保证二叉树中每个节点的val值均不相同。 示例1 输入: [3,5,1,6,2,0,8,#,#,7,4],5,1 复制返回值: 3 要想找到两个节点的最近公共祖先节点,我们可以从两个节点往上找,每个节点都往上走,一直走到根节点,那么根节点到这两个节点的连线肯定有相交的地方,如果是从上往下走,那么最后一次相交的节点就是他们的最近公共祖先节点。我们就以... 阅读详情

二叉树的最近公共祖先

力扣题目链接

题目描述

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

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

解题思路

差点给我绕进去了,我的方法是递归遍历二叉树,返回值是找到了多少个目标节点,当第一次出现2时,把值归零。这样就可以找到最近的公共祖先了。
其中当节点等于目标节点中任意一个时,把值加一,然后把左右子树递归的返回值加上,这个值就是用来记录的,而且可以拓展至n个节点的最近公共祖先。
但是这个解法也是有局限性的,一方面找到公共祖先后仍然需要继续递归直至结束。

题解

class Solution {
public:
    int func(TreeNode* root, TreeNode* p, TreeNode* q, TreeNode*& ans) {
        if(!root) {
            return false;
        }

        int n = 0;
        if(root == p || root == q){
            n++;
        }
        n += func(root->left, p, q, ans);
        n += func(root->right, p, q, ans);
        if(n == 2){
            ans = root;
            n = 0;
        }

        return n;
    }

    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        TreeNode* ans = root;
        func(root, p, q, ans);
        return ans;
    }
};
【扫地机器人测试】 本测试方案旨在系统性评估扫地机器人的核心功能、性能指标、可靠性及用户体验,验证产品是否符合设计规范、行业标准及市场需求。通过多维度、全场景的测试,精准定位产品缺陷与优化空间,为产品迭代提供数据支撑,确保上市产品的质量稳定性与用户满意度。 阅读详情

相关推荐

STM32的bootloader程序(通过串口更新STM32应用程序)

STM32的bootloader程序(通过串口更新STM32应用程序),对bootloader进行浅浅的学习

星羽空间 1万+

【二叉树进阶】二叉树经典面试题——最近公共祖先问题

二叉树经典面试题讲解——最近公共祖先问题

m0_70980326的博客 1485

向NCBI上传16S rDNA数据的操作详解

专门介绍向NCBI上传16S rDNA数据的方法不太多。因为自己有上传数据的需要,所以决定边摸索边写下操作流程。如果这篇博文交代了上传步骤以及一些描述文件属性的书写,帮到你的话,还请点赞收藏。

yue81560的博客 2万+

算法训练营day21(二叉树07:二叉搜索树的最小绝对差,二叉搜索树的众数,二叉树最近公共祖先)

/因为牵扯到回溯所以后序遍历,遍历整棵树而不是一条边,所以left == XX,后面处理left和right,而不是if(leftXX) 就直接return。要用到搜索树的特性,需要中序遍历让输出是从小到大,这样比较pre.val == cur.cal就知道重复了。//搜索树最小的差值肯定在相邻节点之间,所以遍历一次就可以了。遍历搜索树,双指针指向当前节点和上一个节点,更新差值;众数可能有多个,遍历搜索树,更新众数数组;//要用到搜索树的特性必须中序遍历。从下往上遍历,后续遍历,返回公共祖先节点。

weixin_61931006的博客 1030

S速度曲线轨迹规划(普通变频位置闭环控制算法详细介绍+SCL代码)

位置控制用PD控制器,详细内容介绍请查看下面博客文章:PD控制器算法详细解读_RXXW_Dor的博客-优快云博客鉴于积分和微分在工程上的大量应用,这篇博文主要讲解工程上的如何求导f'(x),导数反映的是函数(信号)的变化率,牛顿也是在研究运动的时候提出了微积分的概念,我们知道反映位移变化的快慢程度是速度v(t),反映速度变化快慢程度的物理量是加速度(速度的变化率)。

RXXW_Dor的博客 3887

《QGIS快速入门与应用基础》151:批量属性值赋值(字段计算器)

本文介绍了QGIS中字段计算器的批量属性值赋值方法,重点讲解了简单赋值(统一值和递增序列)的操作步骤与表达式应用。文章首先强调数据备份、字段类型确认等必要前提,随后详细解析字段计算器的界面功能分区和打开方式。通过具体场景示例,展示了如何为图层统一赋值固定值或生成连续编号序列,并提供了文本、数字、日期等不同字段类型的表达式模板。文中特别提醒新手优先创建新字段而非直接更新现有字段,以避免数据丢失风险,同时推荐使用$id和rownum()函数实现基础序列生成。该教程适合GIS初学者快速掌握批量属性编辑的核心技能。

LuckyHanMo的博客 489

100道面试必会算法-21-二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(

qq_45103836的博客 513

计算电磁学(三)有限差分方法

有限差分方法(FDM)是一种数值处理方法,通过将偏微分方程变换为一组代数方程,通过求解代数方程组来得到原边值问题的近似值。由于有限差分法非常简单,所以也特别的稳定高效。其中时域有限差分方法(FDTD)是电磁分析中的常用方法。在计算电磁学中,常用有限差分方法(finite difference equations)来替代微分方程。一个有限差分法通常包括三个步骤将求解域划分网格用有限差分方程逼近给定的微分方程求解在给定边界条件和初始状态下的方程常用的网格模型方阵斜方阵三角阵圆形阵。

CCC_B的博客 1640

2020-10-21剑指offer-二叉树的最近公共祖先

剑指 Offer 68 - II. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 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 =

weixin_45685699的博客 146

基于RK3588调试WiFi模块AIC8800

本文介绍了在RK3588平台上移植AIC8800 WiFi模块驱动的过程。开发环境基于Linux 6.1内核和Buildroot文件系统。驱动移植步骤包括:将驱动包放入SDK指定目录、修改Makefile、编译内核、放置固件文件、手动加载驱动模块等。文章还分析了两种常见异常情况:无法识别模块(检查USB信号线路和供电)和偶发断连(检查硬件连接和调整PHY寄存器)。成功加载后可通过ifconfig看到wlan0节点。

qq_45147279的博客 667

【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏1(附项目源码)

当今,塔防游戏已经成为游戏市场上备受欢迎的一类游戏类型。《保卫萝卜》作为其中的经典之作,深受玩家喜爱。本项目旨在基于《保卫萝卜》的玩法和特点,开发一个Unity2D塔防游戏,让玩家可以在游戏中体验到精彩的策略对抗与刺激的关卡挑战。本项目将通过Unity引擎进行开发,利用2D游戏开发相关技术,包括但不限于精灵动画、碰撞检测、UI界面设计等。我们将实现萝卜作为关键角色的防守任务,并设计各种怪物和防御塔,使得游戏具有多样的战术策略和游戏乐趣。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 4924

最近公共祖先 python_查找最近公共祖先(LCA)

一、问题求有根树的任意两个节点的最近公共祖先(一般来说都是指二叉树)。最近公共祖先简称LCA(Lowest Common Ancestor)。例如,如下图一棵普通的二叉树。结点3和结点4的最近公共祖先是结点2,即LCA(3,4)=2 。在此,需要注意到当两个结点在同一棵子树上的情况,如结点3和结点2的最近公共祖先为2,即 LCA(3,2)=2。同理:LCA(5,6)=4,LCA(6,10)=1。明...

weixin_39706127的博客 553

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

leetcode 剑指 Offer 68 - II. 二叉树的最近公共祖先 & 236. 二叉树的最近公共祖先

剑指 Offer 68 - II. 二叉树的最近公共祖先&236. 二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 例如,给定如下二叉树: root =...

Lucky小黄人的博客 156

OV9734 DATASHEET,完整规格书

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

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

蓝桥杯训练——顺序存储的二叉树的最近的公共祖先问题

问题描述: 习题4.5 顺序存储的二叉树的最近的公共祖先问题(25 分) 设顺序存储的二叉树中有编号为i和j的两个结点,请设计算法求出它们最近的公共祖先结点的编号和值。 输入格式: 输入第1行给出正整数n(≤1000),即顺序存储的最大容量;第2行给出n个非负整数,其间以空格分隔。其中0代表二叉树中的空结点(如果第1个结点为0,则代表一棵空树);第3行给出一对结点编号i和j。 题目保证输

新生啸月的博客 1752

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

算法训练营day22(二叉树08:二叉搜索树的最近公共祖先,插入,删除)

/在遍历二叉搜索树的时候就是寻找区间[p->val, q->val](注意这里是左闭又闭),如果 cur->val 大于 p->val,同时 cur->val 大于q->val,那么就应该向左遍历(说明目标区间在左子树上)。if( root.val == key){//找到了,要删除节点。

weixin_61931006的博客 1218

二叉树最近公共祖先(LeetCode)

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

weixin_30278237的博客 82

力扣刷题之外观数列与二叉树的最近公共祖先

题目一描述: 给定一个数字n,该数字对应的字符串是对n-1字符串的一个描述,如果n是1,则字符串为1. n=1 “1” 单纯的1 n=2 “11” 表示一个1 n=3 “21” 表示两个1 n=4 “1211” 一个2一个1 题目链接 题目一分析: 个人使用递归进行处理,当前n的字符串依赖于前一个字符串,所以每次都需要前面的字符串信息。 代码如下: class Solution { public String countAndSay(int n) { //如果当前的n为1直接

星的博客 234

[Swift]LeetCode236. 二叉树的最近公共祖先 | Lowest Common Ancestor of a Binary Tree

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/streng...

weixin_30293079的博客 125

我在代码随想录|写代码Day21之二叉树-501. 二叉搜索树中的众数,236. 二叉树的最近公共祖先,235. 二叉搜索树的最近公共祖先

博主介绍: 27dCnc专题 : 数据结构帮助小白快速入门。

2303_79299383的博客 1035

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

基本概念:简述LCALCALCA的定义(两个节点ppp和qqq向上追溯,第一次交汇的节点)。场景引入:为什么这个问题在面试和实际算法中如此重要(如家谱树寻亲、组织架构分析)。核心痛点:在复杂的二叉树结构中,如何高效地“自底向上”传递寻找结果?通过“计数法”解决 LCA 问题,最大的魅力在于它将复杂的路径追踪转化成了简单的状态累加。这种“自底向上”的信息传递思想,不仅能解决最近公共祖先问题,也是解决许多复杂树形 DP(动态规划)问题的基石。

2301_79808308的博客 559

二叉树中的最近公共祖先问题

题目:要求寻找二叉树中两个节点的最近的公共祖先,并将其返回。 view sourceprint?1 class Node 2 { 3 Node * left; 4 Node * right; 5 Node * parent; 6 }; 7 /*查找p,q的最近公共祖先并将其返回。*/ ...

rein07的专栏 141

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

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

weixin_30322405的博客 88

最近公共祖先 LCA 递归非递归

给定一棵二叉树,找到两个节点的最近公共父节点(LCA)。最近公共祖先是两个节点的公共的祖先节点且具有最大深度。假设给出的两个节点都在树中存在。 dfs递归写法 查找两个node的最近公共祖先,分三种情况: 如果两个node在root的两边,那么最近公共祖先就是root。 如果两个node在root的左边,那么把root的左子树作为root,再递归。 如果两个node在root的右边,...

weixin_30532973的博客 428

235.二叉树最低公共祖先

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

yocichen 279

【JZ86 在二叉树中找到两个节点的最近公共祖先】

描述 给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。 数据范围:树上节点数满足 1 ≤ n ≤ 105 , 节点值val满足区间 [0,n) 要求:时间复杂度 O(n)O(n) 注:本题保证二叉树中每个节点的val值均不相同。 如当输入{3,5,1,6,2,0,8,#,#,7,4},5,1时,二叉树{3,5,1,6,2,0,8,#,#,7,4}如下图所示: 所以节点值为5和节点值为1的节点的最近公共祖先节点的节点值为3,所以对

Sugar_wolf的博客 746
上一篇: 算法-二叉树篇20-二叉搜索树中的众数
下一篇: 算法-二叉树篇22-二叉搜索树的最近公共祖先
Buling_0
博客等级 码龄5年 232粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值