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

news2025/1/11 5:12:24

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

难度: m i d d l e \color{orange}{middle} middle


题目描述

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

百度百科中最近公共祖先的定义为:“对于有根树 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 为不同节点且均存在于给定的二叉搜索树中。

算法

(暴力枚举)

  1. 由于这是一棵二叉查找树,我们可以利用二叉查找树的性质来从根结点开始寻找。
  2. 首先根结点必定是候选公共祖先,接着如果 pq 同时出现在左子树,则我们往左儿子移动;如果 pq 同时出现在右子树,则我们往右儿子移动;
  3. 若发现不满足 2 中的两个条件,则停止寻找,当前结点就是最近公共祖先。

复杂度分析

  • 时间复杂度:每次都会降低一层,故最坏时间复杂度也就是树的高度 O ( h ) O(h) O(h)

  • 空间复杂度 : O ( 1 ) O(1) O(1)

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) {
        TreeNode* cur = root;
        while (1) {
            if (p->val < cur->val && q->val < cur->val) 
                cur = cur->left;
            else if (p->val > cur->val && q->val > cur->val)
                cur = cur->right;
            else 
                break;
        }

        return cur;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/380022.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决pycharm中报ModuleNotFoundError: No module named ‘tensorflow‘错误

在pycharm中编写python程序时&#xff0c;遇到了报ModuleNotFoundError:no module named XXX的错误。以下是我的解决方法。 目录 一、错误现象 二、原因分析 三、解决方法 四、更多错误解决方法 一、错误现象 执行python程序时&#xff0c;报错&#xff0c;错误信息为Modu…

python字符串练习

python字符串练习 1.去掉字符串中所有的空格 s This is a demo print(s.replace( , )) 2.获取字符串中数字的个数 data input("请输入一些字符串&#xff1a;") a 0 for i in data:if i.isdigit():a a 1 print("数字个数:", a)3.将字母全部转换为…

Cypher中的聚合

深解Cypher中的聚合 值或计数的聚合要么从查询返回&#xff0c;要么用作多步查询下一部分的输入。查看数据模型 CALL db.schema.visualization() 查看图中节点的属性类型 CALL db.schema.notetypeproperties() 查看图中关系的属性类型 CALL db.schema.reltypeproperties() C…

普通二本,去过阿里外包,到现在年薪40W+的高级测试工程师,我的两年转行经历...

我是一个普通二本大学机械专业毕业&#xff0c;14年毕业&#xff0c;16年转行&#xff0c;目前做IT行业的软件测试已经有3年多&#xff0c;职位是高级软件测试工程师&#xff0c;坐标上海…我想现在我也有一点资格谈论关于转行这个话题&#xff1b;希望你在决定转行之前&#x…

爆品分析第4期 | 从周销12件到3700+件,这款收腰裤热度和口碑都爆了!

衣食住行&#xff0c;衣是排在第一位的&#xff0c;作为复购率最高的类目之一&#xff0c;服饰一直是TikTok上电商选品的风向标&#xff0c;是衡量电商发展情况的重要参考指标。随着疫情的结束和经济的日渐好转&#xff0c;消费者对服装类的需求上升。除了时装、T恤等日常消费的…

无损音乐格式:FLAC和ALAC

前言&#xff1a;我最近在弄苹果的airplay项目&#xff0c;发现airplay2对比airplay多了音质方面的增强。AAC和MP3接触过&#xff0c;但对FLAC和ALAC完全不了解&#xff0c;整理学习资料汇总成如下信息&#xff1a; AirPlay2 在2017年推出&#xff0c;在前一代AirPlay的基础上…

一篇文章搞性IPV6的原理和配置

本章对IPV6做了简单的介绍&#xff0c;并通过实验让读者了解IPV6地址和6TO4隧道的配置方法。 本章包含以下内容&#xff1a;  IPV6的概述 配置IPV6地址 配置6to4隧道  10.1 IPv6的概述 IPv6&#xff08;Internet Protocol Version 6&#xff09;是网络层协议…

MyBatis源码分析(一)MyBatis整体架构分析

文章目录一、为什么要用MyBatis1、原始JDBC的痛点2、Hibernate 和 JPA3、MyBatis的特点4、MyBatis整体架构5、MyBatis主要组件及其相互关系6、MyBatis源码的特点二、源码环境搭建未完待续一、为什么要用MyBatis 1、原始JDBC的痛点 在传统JDBC场景下&#xff0c;SQL 夹杂在Jav…

Databend 开源周报第 80 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.com 。Whats New探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。Features & Improvements :…

Unity Asset Bundle学习 - 加载本地资源

Unity的 Asset Bundle 文档 https://docs.unity3d.com/cn/2019.4/Manual/AssetBundles-Workflow.html 第一次接触 直接按官方文档操作 下面接着按文档走流程 构建AssetBundle 此脚本将在 Assets 菜单底部创建一个名为 Build AssetBundles 的菜单项&#xff0c;该菜单项将执行与…

STM32学习笔记-DMA

文章目录一、功能框图通道选择仲裁器FIFO1. **FIFO**: First in First out2. FIFO作用&#xff1a;端口二、DMA模式配置1. 传输模式2. 源地址和目标地址3. 流控制器4. 循环模式5. 传输类型6. 直接模式7. 双缓冲模式8.DMA中断事件三、程序设计1. DMA初始化结构体DMA(Direct Memo…

20 | k8s v1.20集群搭建master和node

1 单节点master 1.1 服务器整体规划 1.2 单Master架构图 1.3 初始化配置 1.3.1 关闭防火墙 systemctl stop firewalld systemctl disable firewalld1.3.2 关闭selinux sed -i s/enforcing/disabled/ /etc/selinux/config # 永久 setenforce 0 # 临时 1.3.3 关闭swap …

tiktok小店如何找到美妆爆品?(内附2月tiktok数据分析)

根据相关数据统计&#xff0c;2023年来全球美妆个护零售总额稳步增长。随着全球化加剧&#xff0c;越来越多的美妆个护品牌选择出海&#xff0c;寻找新的增长和变现机会。Tiktok的快速发展给这些美妆个护品牌提供了新的可能&#xff0c;打通了出海的新思路。同时对于出海的小店…

LeetCode 2373. 矩阵中的局部最大值

LeetCode 2373. 矩阵中的局部最大值 难度&#xff1a;easy\color{Green}{easy}easy 题目描述 给你一个大小为 nxnn x nnxn 的整数矩阵 gridgridgrid 。 生成一个大小为 (n−2)x(n−2)(n - 2) x (n - 2)(n−2)x(n−2) 的整数矩阵 maxLocalmaxLocalmaxLocal &#xff0c;并满足…

解决Ubuntu虚拟机不能复制粘贴

安装虚拟机的时候就有点不顺&#xff0c;在填写用户名和密码的时候键盘敲不上字&#xff0c;重新又安装了几次才行&#xff0c;安装成功后发现不能复制粘贴主机的内容&#xff0c;这肯定不行啊&#xff0c;找解决方案&#xff0c;网上也有很多&#xff0c;有如下&#xff1a;重…

泰克示波器|MSO64示波器的应用

泰克新一代示波器MSO64为实例来讲解时频域信号分析技术。MSO64采用全新TEK049平台&#xff0c;不仅实现了4通道同时打开时25GS/s的高采样率&#xff0c;而且实现了12-bit高垂直分辨率。同时&#xff0c;由于采用了新型低噪声前端放大ASIC—TEK061&#xff0c;大大降低了噪声水平…

Springboot整合Easy-Es

版本说明 Springboot 2.7.5JDK 17Elasticsearch 7.14.0Easy-Es 1.1.1《点我进入Easy-Es官网》PS&#xff1a;目前Easy-Es暂不支持SpringBoot3.X Windows10安装Elasticsearch 《安装Elasticsearch教程》 pom.xml <parent><groupId>org.springframework.boot<…

SpringBoot集成Swagger3.0(入门)01

创建SpringBoot项目 创建完成后再pom文件中导入swagger3.0依赖&#xff0c;具体的pom文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://w…

一看就懂 —— Spring boot + Spring MVC + MyBatis 基础框架demo

目录 前言 一、项目依赖 二、配置文件 三、创建数据库和实体类 3.1、创建数据库 3.2、创建实体类 四、构建 Mapper 层代码实现&#xff08;接口 XML&#xff09; 4.1、创建接口 4.2、创建 XML 4.3、XML 文件与接口的对应关系 五、实现服务层 六、实现控制器 小结 …

原生JS实现拖拽排序

拖拽&#xff08;这两个字看了几遍已经不认识了&#xff09; 说到拖拽&#xff0c;应用场景不可谓不多。无论是打开电脑还是手机&#xff0c;第一眼望去的界面都是可拖拽的&#xff0c;靠拖拽实现APP或者应用的重新布局&#xff0c;或者拖拽文件进行操作文件。 先看效果图&am…