Leetcode-235. 二叉搜索树的最近公共祖先

LeetCode - #235 二叉搜索树的最近公共祖先 我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。)的 Swift 算法题题解整理为文字版以方便大家学习与阅读。LeetCode 算法到目前我们已经更新到 234 期,我们会保持更新时间和进度(周一、周三、周五早上 9:00 发布),每期的内容不多,我们希望大家可以在上班路上阅读,长久积累会有很大提升。不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。难度水平:中等。 阅读详情

Leetcode-235. 二叉搜索树的最近公共祖先

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

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

例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]

示例 1:

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

示例 2:

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

说明:
所有节点的值都是唯一的。
p、q 为不同节点且均存在于给定的二叉搜索树中。

思路:
    根据二叉搜索树的性质来判断,p,q的公共祖先肯定满足:大于p并且小于q,因此可以按照这个条件依次遍历结点,若root结点是,则返回root,若root>q,则在其左边,否则在其右边找。
C++ code:

/**
 * 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) {
        //使得p保存val小的数值,q保存为val较大的数值
        if(p->val > q->val){
            swap(p, q);
        }
        //根据二叉搜索树的性质来判断,p,q的公共祖先肯定满足,大于p并且小于q,因此可以按照这个条件依次遍历结点,若root结点是,则返回root,若root>q,则在其左边,否则在其右边找。
        while(root){
            if(root->val >= p->val && root->val <= q->val){
                return root;
            }else if(root->val > q->val){
                root = root->left;
            }else{
                root = root->right;
            }
        }
        return root;
    }
};
cuda安装时出现错误 Unable to locate package cuda-toolkit-12-4 阅读详情

相关推荐

ZYNQ:【1】深入理解PS端的TTC定时器(Part1:原理+官方案例讲解)

基于UG585详细讲解其中TTC的原理和使用案例。

Alex的技术博客 7886

树的最近公共祖先

LCA(Lowest Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先。 推荐书籍:算法进阶指南 倍增算法(在线) //n结点的树,输出任意两个结点间的最小距离 #include<iostream> #include<cstdio> #include<cstring> #include<algo...

pxlsdz的博客 765

华为交换机密码策略配置避坑指南:明文/密文、长度、复杂度,一个命令就出错

本文详细解析华为交换机密码策略配置的关键要点,包括密码长度、复杂度及等保合规要求。通过实战案例揭示常见配置误区,如明文/密文密码格式差异、复杂度检查联动机制等,帮助网络工程师避免安全漏洞。特别针对等保二级和三级要求,提供可直接落地的安全加固方案。

weixin_30879169的博客 368

7-2 二叉搜索树的最近公共祖先

这是一个学习数据结构的大学生做题的一些想法,哈哈,可能没有什么技术含量,但希望可以给大家帮助,同时希望可以记录一下,提高一下自己敲代码的能力。点个关注,持续更新~

2302_80273625的博客 816

MOOS-ivp 实验三 MOOS简介(3)

MOOS-ivp 实验三 MOOS简介(3) 继上一篇文章继续对实验进行记录 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录MOOS-ivp 实验三 MOOS简介(3)六、A Simple Example with pXRelay1.pXRelay基本使用2.pXRelay简单例子3.pXRelay实验七、First Experiments in Modifying MOOS App Code1.下载一个MOOS模板文件2.打开MOOS模板文件总结 六、A Simple E

weixin_44151170的博客 2534

从TL431光耦到集成隔离器:3种反激电源反馈方案全对比,你的项目到底该选哪个?

本文深入对比了反激电源设计中TL431光耦、集成隔离器和原边反馈三种主流反馈方案的优缺点,帮助开发者在电源设计中选择最适合的方案。从精度、成本、隔离等级等多维度分析,为反激式(Flyback)拓扑的应用提供实用选型指南。

weixin_30536513的博客 399

PTA二叉搜索树的最近公共祖先

给定一棵二叉搜索树的先序遍历序列,要求你找出任意两结点的最近公共祖先结点(简称 LCA)。 输入格式: 输入的第一行给出两个正整数:待查询的结点对数 M(≤1 000)和二叉搜索树中结点个数 N(≤10 000)。随后一行给出 N 个不同的整数,为二叉搜索树的先序遍历序列。最后 M 行,每行给出一对整数键值 U 和 V。所有键值都在整型int范围内。 输出格式: 对每一对给定的 U 和 V,如果找到A是它们的最近公共祖先结点的键值,则在一行中输出LCA of U and V is A.。但...

北边一颗小星星 1830

保姆级教程:用U盘给浪潮服务器装系统(含RAID驱动加载技巧)

本文提供了一份详细的浪潮服务器U盘安装系统指南,重点介绍了RAID驱动加载技巧与实战步骤。从准备工作到系统安装全流程,涵盖RAID配置、驱动加载方法及常见问题排查,帮助用户高效完成服务器系统部署。特别强调RAID驱动与服务器型号的匹配性,确保安装过程顺利。

uuu88的博客 734

二叉搜索树的最近公共祖先

输入的第一行给出两个正整数:待查询的结点对数 M(≤ 1 000)和二叉搜索树中结点个数 N(≤ 10 000)。随后一行给出 N 个不同的整数,为二叉搜索树的先序遍历序列。给定一棵二叉搜索树的先序遍历序列,要求你找出任意两结点的最近公共祖先结点(简称 LCA)。如果 二叉搜索树中找不到以 U 或 V 为键值的结点,则输出。但如果 U 和 V 中的一个结点是另一个结点的祖先,则在一行中输出。是它们的最近公共祖先结点的键值,则在一行中输出。对每一对给定的 U 和 V,如果找到。是那个祖先结点的键值,

笔记 1134

Android息屏后台任务保活实战:从定时器失效到厂商白名单破解

本文深入探讨了Android应用在息屏后定时任务失效的根源,即系统为省电而触发的休眠机制。文章提供了从传统方案失效分析到实战破解的完整路径,核心在于引导用户将应用加入电池优化白名单并开启自启动权限,从而合法绕过限制。同时,结合WorkManager、AlarmManager等可靠定时方案,实现稳定的后台任务执行。

weixin_28475533的博客 421

用V E S C 6-M K V I 第六代调速控制器给VESC电调刷固件

文章摘要:本文介绍了一款先进的电机控制器,具备多项创新技术。核心亮点包括三相电流/电压检测、四象限无缝运行、多模式兼容等先进电机控制技术,以及智能感知与安全保护、高效能电源管理、多样化连接与扩展功能。此外,该控制器支持实时数据监测与用户交互,具备开源生态和工业级可靠性,适用于电动载具、机器人及工业领域。用户需注意散热要求和兼容性提示,可通过VESC-Tool软件进行灵活配置。产品可在常竹科技淘宝店购买,并加入技术交流群获取支持。

2403_89422757的博客 1364

二叉搜索树的最近公共祖先【数据结构】

二叉搜索树

m0_74053777的博客 921

使用Simulink来模拟多旋翼无人机在风扰动条件下的飞行情况,并分析其稳定性

本教程详细介绍了使用Simulink进行多旋翼无人机风扰动稳定性分析的完整流程。首先构建包含飞行器动力学模型、控制系统和环境模拟模块的系统框架,重点讲解简化动力学方程的实现方法。随后指导设计PID控制器来维持姿态稳定,并添加随机风扰动模型模拟环境干扰。通过设置输入信号和输出显示,最终实现对不同风速条件下无人机控制性能的评估。该实例为无人机控制系统设计提供了实用的仿真方法,强调利用MATLAB工具进行可视化分析和参数优化,以提高系统抗干扰能力和稳定性。

amy_mhd的博客 418

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

题目要求在二叉搜索树中找到两个指定节点的最近公共祖先(LCA)。利用二叉搜索树的性质,通过比较节点值区间,从根节点开始迭代遍历:若当前节点值大于两者,向左搜索;若小于两者,向右搜索;否则当前节点即为LCA。Java实现通过循环优化空间复杂度至O(1),时间复杂度为O(h)。示例代码展示了如何高效定位LCA,提交结果验证了算法性能。 关键词:二叉搜索树、最近公共祖先、迭代优化、时间复杂度O(h)

ylumwd的博客 1352

OV9734 DATASHEET,完整规格书

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

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

LeetCode 235. 二叉搜索树的最近公共祖先

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

sdm12345的博客 449

NTscan扫描工具

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

LeetCode第235题_二叉搜索树的最近公共祖先

摘要:LeetCode第235题要求找出二叉搜索树中两个节点的最近公共祖先。利用二叉搜索树的特性(左子树值小于根,右子树值大于根),可通过迭代或递归方法高效解决。迭代法从根节点出发,根据节点值比较决定向左或向右移动,时间复杂度O(h);递归法同理,但空间复杂度O(h)。本文提供了C#、Python和C++的迭代与递归实现代码,适用于平衡树时性能更优。

qq_40263592的博客 835

Leetcode235. 二叉搜索树的最近公共祖先

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

会流泪de鱼的博客 272

【day11】LeetCode(力扣)练习【1652.拆炸弹】【235. 二叉搜索树的最近公共祖先】【733. 图像渲染】

力扣刷题第十一天 今天刷【1652.拆炸弹】【235. 二叉搜索树的最近公共祖先】【733. 图像渲染】

ebb29bbe的博客 764

#力扣 LeetCode235. 二叉搜索树的最近公共祖先 @FDDLC

题目描述: 235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode) (leetcode-cn.com) Java代码一: class Solution { //所有节点的值都是唯一的。 p、q 为不同节点且均存在于给定的二叉搜索树中。 TreeNode answer=null,p,q; public boolean ancestor_and_descendent(TreeNode a,TreeNode d){ //判断a、d是否是祖先与后代的关系 if.

LiuXingchang的博客 379

leetcode 235 二叉搜索树最近公共祖先

leetcode 235 二叉搜索树最近公共祖先 题目描述: 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。 解法一:自己的写法,贼傻 # Definition for a bina...

diaoqian7700的博客 173

LeetCode 235 二叉搜索树的最近公共祖先

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

旺崽的博客 2728

leetcode 235:二叉搜索树的最近公共祖先(python)

腾讯精选练习(50 题)Day44 || leetcode 235:二叉搜索树的最近公共祖先(python)

nanashi_F的博客 468

算法学习——LeetCode力扣二叉树篇7(236. 二叉树的最近公共祖先、235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点)

算法学习——LeetCode力扣二叉树篇7(236. 二叉树的最近公共祖先、235. 二叉搜索树的最近公共祖先、701. 二叉搜索树中的插入操作、450. 删除二叉搜索树中的节点)

拉依达不拉跨的博客 1133

leetcode 235. 二叉搜索树的最近公共祖先(Java版,树形dp套路)

题目 原题地址:leetcode 235. 二叉搜索树的最近公共祖先 说明: 所有节点的值都是唯一的。 p、q 为不同节点且均存在于给定的二叉搜索树中。 题解 关于 树形dp 套路,可以参考我的另一篇博客:左神算法:找到二叉树中的最大搜索二叉子树(Java版) 下面简述本题思路: 首先,如何判断一个节点 head 是否是 p、q 的公共祖先?只需要用二分查找的方式,判断以 head 为头的树中是否包含 p、q 即可。 然后,如何找到“最近”的公共祖先?直观上看,最近的公共祖先,一定是所有的公共祖先中

寒泉 6万+

Leetcode235.二叉搜索树的最近公共祖先

如果在回溯算法中,或者后序遍历中,我们大部分时间是需要使用left和right存取数值并交给根节点进行处理的但是在面对一些已经知道具体顺序的树中,或者是前序遍历中,我们仅仅是进行查找数据,那么可以去使用单边遍历进行递归。

kyrieyu111的博客 208

LeetCode 235. 二叉搜索树的最近公共祖先 | C++语言版

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

weixin_45992021的博客 413
上一篇: 20190702-剑指offer68-AcWing-88. 树中两个结点的最低公共祖先
下一篇: Leetcode-104. 二叉树的最大深度
WangXu__
博客等级 码龄9年 3粉丝 156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值