算法-二叉树篇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;
    }
};
如何选择StandardScaler、MinMaxScaler和RobustScaler做标准化的对比解释和示例代码 选择合适的标准化方法取决于数据的特点和需求。如果数据分布接近正态分布且无异常值,可以使用。如果需要将数据映射到特定范围内并保持相对关系,可以使用。如果数据中存在异常值或离群点,可以使用进行鲁棒标准化。在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,StandardScaler表现更好(避免不同量纲对方差、协方差计算的影响);在不涉及距离度量、协方差、数据不符合正态分布、异常值较少的时候,可使用MinMaxScaler。 阅读详情

相关推荐

HID报告描述符实战解析:从Usage到Item的完整设计流程

本文深入解析了HID报告描述符的设计流程,从核心概念Usage(用途定义)入手,详细阐述了如何通过Item(条目)的三种角色——全局、局部与主干,构建出能被系统正确识别的设备“说明书”。文章以标准USB鼠标和键盘为例进行实战拆解,并介绍了使用Report ID与自定义设备等进阶设计方法,帮助开发者掌握这一实现USB设备即插即用的关键技术。

weixin_29230865的博客 282

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

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

m0_70980326的博客 1485

Apache Paimon快照管理实战:如何避免Flink作业中的反压问题?

本文深入探讨了如何通过优化Apache Paimon的快照管理机制来避免Flink作业中的反压问题。详细解析了同步与异步快照过期模式的适用场景及配置建议,并提供了Checkpoint策略与状态后端的协同优化方案,帮助提升实时数据处理的性能和稳定性。

i1j2k的博客 177

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

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

weixin_61931006的博客 1030

【CAPL实用开发】--- 使用VN1640A测试Busoff快慢恢复

使用VN1640A测试Busoff快慢恢复,包含具体的CAPL代码实现。

LabVIEW、CAPL、python、车载以太网等学习分享,文章正在写 2095

Python+Tableau 全流程数据分析实战:从数据清洗到商业洞察可视化

本文通过Python+Tableau完整演示电商销售数据分析流程。首先使用Python进行数据清洗(缺失值处理、异常值过滤等)和探索性分析(商品类别、时间趋势等),然后导入Tableau创建交互式可视化仪表盘。分析发现电子产品销售额最高但利润率低,美妆类利润率最优,东部地区销售表现最好。最终提出优化供应链、加强美妆推广等商业建议,展示了Python数据处理与Tableau可视化的高效配合。所有代码可直接运行,适合数据分析初学者和从业者实战参考。

weixin_44520581的博客 337

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

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

qq_45103836的博客 513

Jlink除了调试还能干啥?用JFlash SPI给W25Q64烧录固件的5个实用技巧

本文深入探讨了Jlink的隐藏功能,特别是通过JFlash SPI高效烧录W25Q64的5个进阶技巧。从硬件连接优化到批量处理脚本,再到数据安全验证,这些技巧能显著提升烧录速度和稳定性,适用于量产环境。文章还提供了详细的参数配置和脚本示例,帮助工程师充分发挥Jlink的潜力。

weixin_29164843的博客 409

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

《Python星球日记》 第72天:问答系统与信息检索

《Python星球日记》 第72天:问答系统与信息检索,在前面的日子里,我们学习了自然语言处理的基础知识,包括文本预处理、词向量、Transformer架构和各种预训练模型。今天,我们将探索问答系统这一NLP的重要应用,以及如何结合信息检索技术构建智能问答系统。

Code_流苏:在代码中寻诗意,在实践中觅真知 1075

基于潜在空间分数匹配的混合型表格数据合成方法

然而,在我们的模型中,β 预计会更小,因为我们不需要嵌入的分布精确地遵循标准高斯分布,因为我们还有一个额外的扩散模型。受 Transformer 在表格数据分类/回归任务中取得成功的启发,我们首先为每一列学习一个独特的标记器,然后将标记(列)级表示输入到 Transformer 中,以捕捉列之间错综复杂的关系。在第 4 节中,我们证明了通过这种设计,TABSYN 可以在不到 20 次函数评估(NFE)的情况下生成高质量的合成表格数据,这比其他基于扩散的表格数据合成方法要少得多。是标记器的可学习参数。

步子哥的博客 854

最近公共祖先 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

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

Lucky小黄人的博客 156

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

温度PID控制PLC程序

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

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

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

新生啸月的博客 1752

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

算法训练营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、付费专栏及课程。

余额充值