(刷题笔记)Leetcode 235.二叉搜索树的最近公共祖先

Globus 数据下载 Globus 大数据下载流程~ 阅读详情

题目

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

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

例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]
在这里插入图片描述
输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
输出: 6
解释: 节点 2 和节点 8 的最近公共祖先是 6。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree

二叉搜索树的概念

二叉搜索树:又名二叉排序树。它或者是一棵空树,或者是具有以下性质的二叉树

  • 1.若它的左子树不为空,则左子树上所有的结点均小于它的根结点的值;
  • 2.若它的右子树不为空,则右子树上所有的结点均大于它的根结点的值;
  • 3.它的左、右子树也分别为二叉搜索树。

解题思路

本题为简单题,思路较为直观,利用二叉搜索树的特性就可以解决。
1.比较root的val与p,q的val的大小
2.若root的val大于p,q的val,说明p,q均在root左边,继续向左边查找。
3.若root的val小于p,q的val,说明p,q均在root右边,继续向右边查找。
4.若不是2.3两种情况,则说明该结点就是所查找的最近公共祖先。

代码(C++)

递归

/**
 * 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==NULL) return NULL;
         int root_val=root->val;
         int p_val=p->val;
         int q_val=q->val;

         if(root_val>q_val&&root_val>p_val)
            return lowestCommonAncestor(root->left,p,q);
         if(root_val<q_val&&root_val<p_val)
            return lowestCommonAncestor(root->right,p,q);

         return root;
        
        
    }
};

迭代

/**
 * 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) {

        
         TreeNode* temp=root;

         while(temp!=NULL){
             
             if(temp->val>q->val&&temp->val>p->val){
                 temp=temp->left;
             }
             else if(temp->val<q->val&&temp->val<p->val){
                 temp=temp->right;
             }
             else{
                 break;
             }
          
         }
		 
         return temp;

        
    }   
    
};
13、混合系统的离散与连续交互 本文详细探讨了混合系统中离散事件与连续动态的交互机制,涵盖了建模方法、分析技术、设计挑战以及多种控制策略。通过具体案例研究和操作语义的定义,展示了混合系统在制造业、交通系统、机器人技术和过程控制等领域的广泛应用。文章还介绍了实验仿真、稳定性研究及优化方法,旨在帮助读者全面理解混合系统的设计与控制要点,并为未来智能化和自适应混合系统的发展提供了展望。 阅读详情

相关推荐

Ubuntu 24.04 部署 EMQX 5.8 开源版MQTT服务器:从零搭建到实战应用

本文详细指导如何在Ubuntu 24.04系统上部署EMQX 5.8开源版MQTT服务器。内容涵盖从环境准备、安装Erlang、下载安装包到启动服务的完整步骤,并提供了验证服务、配置网络防火墙以及通过WebSocket工具进行基础消息收发的实战方法,帮助用户快速搭建稳定、免费的物联网消息中间件。

weixin_29209825的博客 293

二叉树的最近公共祖先,二叉搜索树的最近公共祖先(同一个思路)

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

Tianzhenchuan的博客 1640

机械臂标准DH建模及正运动学分析(以IRB4600型工业机械臂为例)

对于工业机械臂而言,运动学是不考虑力学特性的情况下对机械臂的几何参数与其位置、速度、加速度等运动特性的关系研究。DH建模是运动学的基础,全称为Denavit-Hartenberg建模方法,是一种广泛应用于机器人运动学中的建模技术。该方法通过在每个连杆上建立坐标系,并利用齐次坐标变换来实现连杆之间的坐标转换。通过依次变换,可以推导出末端执行器相对于基坐标系的位姿,从而建立机器人的运动学方程。以IRB4600型六自由度工业机械臂为例,选择标准DH建模方法,建立其正运动学模型。

chen_mp的博客 1万+

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

题目: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree 这是一个第一眼看着挺简单,代码也很简单,但是很容易把人绕进去的题。 首先

weixin_43975276的博客 164

射频测试基础知识总结

表示可以辐射到空间的电磁频率,频率范围从300KHz~110GHz之间,射频简称RF,是高频交流变化电磁波的简称,其每秒变化小于1000次被称为低频电流,超过10000次的称为高频电流,而射频就是这种高频电流。为了确保天线接收的信号能够在接收机的最后一级被正确的恢复,一个好的低噪音放大器需要在放大信号的同时产生尽可能低的噪音以及失真。两种,带内试验的范围也有一定的差别,比如,带内试验主要是检测信号的质量,如功率、频谱宽度、调制质量,而带外测试的是信号的杂散、谐波,主要是看对频带之外的干扰有多大。

cny70的博客 9628

N32G003学习——第九章 第三节1 串口 发送

经过第九章前2节的学习,基础打下之后,开始敲代码。

qq_34525008的博客 1034

每日一题:LeetCode之二叉搜索树的最近公共祖先

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

qq_40053995的博客 173

时间同步中 TOD 与GPRMC和IRIG-B的区别

时间同步中 TOD 与GPRMC和IRIG-B的区别

ftdlk的博客 1726

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

// Definition for a binary tree node. #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> struct TreeNode{ int val; struct TreeNode *left; struct TreeNode *right; }; struct TreeNode* lowestComm

qq_45706306的博客 301

最优化问题——一维搜索(一)

最优化问题——一维搜索 1. 一维搜索的引入 1.1 从非线性规划问题到一维搜索 在前面的文章中,我们提到了基于迭代的非线性规划问题的求解思路。在求解过程中,我们提到了在每一步的迭代中都需要对计算步长因子,其计算公式为: λk=minλf(xk+λp)λ_k=min_{λ}f(x_k+λp)λk​=minλ​f(xk​+λp) 我们将f(xk+λp)f(x_k+λp)f(xk​+λp)视为λ的一元函数,我们的目标就是求这个一元函数的极小值。对于这个问题,我通常的求解方式为一维搜索。 1.2 一维搜索的基本形

hei653779919的博客 7361

《Autosar_MCAL高阶配置》总目录_培训教程持续更新中...

《Autosar_MCAL高阶配置》总目录_培训教程持续更新中...

「汽车电子助手」的博客 1万+

LeetCode:面试题68 - I. 二叉搜索树的最近公共祖先(C语言)

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

C/C++攻城狮 400

关闭搜狗输入法右下角广告的解决方案

本文主要介绍了关闭搜狗输入法右下角广告的解决方案,希望能对使用搜狗输入法的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 1万+

Leetcode刷题笔记 235. 二叉搜索树的最近公共祖先

235. 二叉搜索树的最近公共祖先 知识点:二叉树、回溯 时间:2020年9月27日 题目链接:https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-search-tree/ 题目 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。

cjl的博客 236

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LeetCode刷题笔记 235. 二叉搜索树的最近公共祖先

二叉搜索树的最近公共祖先 递归 class Solution { public: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { int parentVal=root->val; / 从根节点开始遍历树 int pVal=p->val,qVal=...

g534441921的博客 156

Camera2Demo

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

LeetCode刷题复盘笔记—235. 二叉搜索树的最近公共祖先 && 236. 二叉树的最近公共祖先

LeetCode刷题复盘笔记—235. 二叉搜索树的最近公共祖先 && 236. 二叉树的最近公共祖先间的节点就是p和q的最近公共祖先再强调一下重点!!!1. 普通二叉树求最近公共祖先:因为是求最近公共祖先(也就是高度最小的公共祖先),所以需要从下往上去处理往上返回,故使用后续遍历2. 二叉搜索树求最近公共祖先关键:从上往下遍历时,遇到的第一个节点数值处于p和q节点数值之间的节点就是p和q的最近公共祖先欢迎大家关注本人公众号:编程复盘与思考随笔(关注后可以免费获得本人在csdn发布的资源源码)

Lucky_Alan_Gareth的博客 238

NTscan扫描工具

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

力扣刷题笔记22|235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

【代码】力扣刷题笔记22|235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点。

qq_45348845的博客 135

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

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

ylumwd的博客 1352

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

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

南 墙 1万+

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]

旺崽的博客 2730

二叉搜索树的最近公共祖先:递归与迭代解法全面解析

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

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

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

1. 二叉搜索树的最近公共祖先(力扣:235) 2. 二叉树的最近公共祖先(力扣:236)

卜大爷的博客 2万+

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

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

2301_80211119的博客 857

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

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

qq_40263592的博客 835

C++力扣题目235--二叉搜索树的最近公共祖先

对于二叉搜索树的最近祖先问题,其实要比普通二叉树公共祖先问题 (opens new window)简单的多。不用使用回溯,二叉搜索树自带方向性,可以方便的从上向下查找目标区间,遇到目标区间内的节点,直接返回。最后给出了对应的迭代法,二叉搜索树的迭代法甚至比递归更容易理解,也是因为其有序性(自带方向性),按照目标区间找就行了。

weixin_47675625的博客 1071

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

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

少说,多做。 6384
下一篇: (刷题笔记)Leetcode 257.二叉树的所有路径
Lucky&Happy
博客等级 码龄10年 1粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值