【数据结构】二叉树篇|超清晰图解和详解:二叉树的最近公共祖先

- 博主简介:努力学习的22级计算机科学与技术本科生一枚🌸
- 博主主页: @是瑶瑶子啦
- 每日一言🌼: 你不能要求一片海洋,没有风暴,那不是海洋,是泥塘——毕淑敏
目录
- 一、题目
- 二、题解
- 三、代码
一、题目
🔗236. 二叉树的最近公共祖先

二、题解
注意:祖先是包括自身的!
-
🍊首先要明白,当root为p,q的最近祖先节点,只有下面3种情况:
1. p,q在root分别存在于root的左右子树中(异侧)——>root即为最近祖先节点
2. p, q均在root的左侧——>p/q即为最近祖先节点
3. p, q均在root的右侧——>同理

-
🍊递归函数的定义
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q):在以root为根节点的树中找并且返回p和q的最近的祖先节点。
1.终止条件:- root == null;return null
root = = p或者root = = q,直接返回p/q
2.递推工作:(到这里说明此时p和q要么在此次递归的root的同侧或者异侧)left 用于记录在左侧进行寻找公共祖先(这里的递归函数作用就是单纯找q/p节点并且找到就返回的作用了,当然你可以另外写一个找节点的函数,但是没必要,因为定义的递归函数本身就能实现这个功能),right同理
-
left和right均为null,说明root的左右都没有p,q,那就不存在公共节点,返回Null(有点扯,按理来说,p,q肯定是存在的,但是特判一下也不亏)
-
⭐left和right均不空,说明在此时递归情况是:p,q在
root异侧,那么直接返回root即可

3. ⭐left不为空,right为空;right不为空,left为空。直接将不为空的那个返回即可!此时不为空的left/right指向的就是最近祖先节点。

三、代码
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root == null || root == p || root == q){return root;}TreeNode left = lowestCommonAncestor(root.left, p, q);TreeNode right = lowestCommonAncestor(root.right, p, q);if(left != null && right !=null){return root;}else if(left == null){return right;}else if(right == null){return left;}else{return null;}}
💐若有不懂的地方,欢迎随时在评论区or私信找瑶瑶子交流讨论🌺

-
Java岛冒险记【从小白到大佬之路】
-
LeetCode每日一题–进击大厂
-
Go语言核心编程
-
算法
相关文章:
【数据结构】二叉树篇|超清晰图解和详解:二叉树的最近公共祖先
博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: 是瑶瑶子啦每日一言🌼: 你不能要求一片海洋,没有风暴,那不是海洋,是泥塘——毕淑敏 目录 一、题目二、题解三、代码 一、题目 …...
android ndk clang交叉编译ffmpeg动态库踩坑
1.ffmpeg默认使用gcc编译,在android上无法使用,否则各种报错,所以要用ndk的clang编译 2.下载ffmpeg源码 修改configure文件,增加命令 cross_prefix_clang 修改以下命令 cc_default"${cross_prefix}${cc_default}" cxx…...
简单记录牛客top101算法题(初级题C语言实现)BM24 二叉树的中序遍历 BM28 二叉树的最大深度 BM29 二叉树中和为某一值的路径
1. BM24 二叉树的中序/后续遍历 要求:给定一个二叉树的根节点root,返回它的中序遍历结果。 输入:{1,2,#,#,3} 返回值:[2,3,1]1.1 自己的整体思路(与二叉树的前序遍…...
前后端分离------后端创建笔记(05)用户列表查询接口(上)
本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论,如有侵权请联系 源码:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/…...
性能测试|App性能测试需要关注的指标
一、Android客户端性能测试常见指标: 1、内存 2、CPU 3、流量 4、电量 5、启动速度 6、滑动速度、界面切换速度 7、与服务器交互的网络速度 二、预期标准指定原则 1、分析竞争对手的产品,所有指标要强于竞品 2、产品经理给出的预期性能指标数据…...
Termux SFTP 进行远程文件传输
文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP(SSH File Transfer Protocol)是一种基于SSH(Secure Shell)安全协议的文件传输协议。与FTP协议相比,SFTP使用了…...
Sqlite3简介
SQLite3 简介 SQLite3 是一种轻量级的嵌入式数据库引擎,被广泛应用于各种应用程序中,包括移动设备、桌面应用程序和嵌入式系统。它以其简单、高效和零配置的特点而受到开发者的喜爱。 以下是 SQLite3 的一些重要特点: 嵌入式数据库引擎&…...
K8S调度
K8S调度 一、List-Watch 机制 controller-manager、scheduler、kubelet 通过 List-Watch 机制监听 apiserver 发出的事件,apiserver 通过 List-Watch 机制监听 etcd 发出的事件1.scheduler 的调度策略 预选策略/预算策略:通过调度算法过滤掉不满足条件…...
vue+element多层表单校验prop和rules
核心点:外层循环是item和index,内层循环是item2和index2 如果都是定义的同一个属性名 外层循环得写:prop"block.index.numerical" 同理内层循环就得写:prop"objectSpecs. index2 .numerical" 校验函数方法 :rules"getRules(it…...
Dubbo 核心概念和架构
以上是 Dubbo 的工作原理图,从抽象架构上分为两层:服务治理抽象控制面 和 Dubbo 数据面 。 服务治理控制面。服务治理控制面不是特指如注册中心类的单个具体组件,而是对 Dubbo 治理体系的抽象表达。控制面包含协调服务发现的注册中心、流量管…...
【数据结构OJ题】反转链表
原题链接:https://leetcode.cn/problems/reverse-linked-list/description/ 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 方法一:三指针翻转法 使用三个结构体指针n1,n2,n3,原地修改结点…...
Java8 Stream 之groupingBy 分组讲解
本文主要讲解:Java 8 Stream之Collectors.groupingBy()分组示例 Collectors.groupingBy() 分组之常见用法 功能代码: /** * 使用java8 stream groupingBy操作,按城市分组list */ public void groupingByCity() { Map<String, List<Em…...
优哲SSD大文件写性能测试
SDD磁盘性能测试: 空盘: 大文件读,写,读写(4/6)性能测试,删除性能测试,N进程,N线程 小文件读,写,读写(4/6)性能测试&am…...
Python基础教程: json序列化详细用法介绍
前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 Python内置的json模块提供了非常完善的对象到JSON格式的转换。 废话不多说,我们先看看如何把Python对象变成一个JSON: d dict(nameKaven, age17, sexMale) print(json.dumps(d)) # {"na…...
一张图看懂 USDT三种类型地址 Omni、ERC20、TRC20的区别
USDT是当前实用最广泛,市值最高的稳定币,它是中心化的公司Tether发行的。在今年的4月17日之前,市场上存在着2种不同类型的USDT。4月17日又多了一种波场TRC20协议发行的USDT,它们各自有什么区别呢?哪个转账最快到账?哪…...
SegFormer之模型训练
单卡训练,所有配置文件里的【SyncBN】改为【BN】 启动训练 (1)终端直接运行 python tools/train.py local_configs/segformer/B1/segformer.b1.512x512.ade.160k.py (2)在编辑器中运行 在 [config] 前面加上’–‘将…...
Azure资源命名和标记决策指南
参考 azure创建虚拟机在虚拟机中选择编辑标签,并添加标记,点击应用 3.到主页中转到所有资源 4. 添加筛选器并应用 5.查看结果,筛选根据给服务器定义的标签筛选出结果。 参考链接: https://learn.microsoft.com/zh-cn/azure/cloud-adoption…...
【在一个升序数组中插入一个数仍升序输出】
在一个升序数组中插入一个数仍升序输出 题目举例: 有一个升序数组nums,给一个数字data,将data插入数组nums中仍旧保证nums升序,返回数组中有效元素个数。 比如:nums[100] {1, 2, 3, 5, 6, 7, 8, 9} size 8 data 4 …...
图像去雨、去雪、去雾论文学习记录
All_in_One_Bad_Weather_Removal_Using_Architectural_Search 这篇论文发表于CVPR2020,提出一种可以应对多种恶劣天气的去噪模型,可以同时进行去雨、去雪、去雾操作。但该部分代码似乎没有开源。 提出的问题: 当下的模型只能针对一种恶劣天气…...
YARN框架和其工作原理流程介绍
目录 一、YARN简介 二、YARN的由来 三、YARN的基本设计思想 四、YARN 的基本架构 4.1 基本架构图 4.2 基本组件介绍 4.2.1 ResourceManager 4.2.1.1 任务调度器(Resource Scheduler) 4.2.1.2 应用程序管理器(Applications Manager) 4.2.1.3 其他…...
别再死记公式!一个Buck电路实例带你吃透‘小信号建模’到底在干什么
从Buck电路实战理解小信号建模:为什么工程师需要这个"数学翻译器"? 第一次接触小信号建模时,我和大多数电力电子初学者一样困惑——明明电路已经能用状态方程描述,为什么还要大费周章地推导那些看似复杂的传递函数&…...
从零入门大模型应用开发:收藏这份学习清单,轻松转型高薪岗位!
文章指出当前AI应用开发社招要求已提升,不再满足于简单的API调用或Demo实现。文章警示三类人慎入AI开发社招,并强调能力复合化、工程深度和业务理解的重要性。作者分享了四年AI开发经验,建议深入原理、重构项目经验,并给出了量化解…...
个人创作者利器:AI净界RMBG-1.4,3秒完成以往30分钟的手动精修
个人创作者利器:AI净界RMBG-1.4,3秒完成以往30分钟的手动精修 1. 为什么你需要AI净界RMBG-1.4? 作为一名内容创作者,你是否经常遇到这些困扰: 拍摄的产品照片背景杂乱,需要花费大量时间手动抠图精心设计…...
AUnit:面向Arduino的轻量级嵌入式单元测试框架
1. AUnit:面向嵌入式Arduino平台的轻量级单元测试框架1.1 设计动因与核心定位AUnit并非凭空诞生的全新框架,而是针对ArduinoUnit 2.2在实际工程中暴露出的三大痛点所进行的深度重构与优化。作为一名长期在资源受限的8位AVR平台(如Arduino UNO…...
千问3.5-2B开源可部署实践:本地GPU环境一键启用,无云服务依赖
千问3.5-2B开源可部署实践:本地GPU环境一键启用,无云服务依赖 1. 模型介绍与核心能力 千问3.5-2B是Qwen系列中的小型视觉语言模型,专为图片理解与文本生成任务设计。这个开源模型最大的特点是能够同时处理视觉和语言信息,实现真…...
Win10下MobSF安装避坑指南:从Python版本冲突到环境变量配置全解析
Win10下MobSF安装避坑指南:从Python版本冲突到环境变量配置全解析 移动应用安全测试已成为开发流程中不可或缺的一环。作为一款强大的开源工具,MobSF(Mobile Security Framework)因其全面的自动化分析能力备受开发者青睐。然而在…...
OpenClaw+Qwen3-14b_int4_awq自动化写作:从资料收集到排版发布
OpenClawQwen3-14b_int4_awq自动化写作:从资料收集到排版发布 1. 为什么需要自动化写作工作流 作为一个技术博主,我经常面临这样的困境:明明有大量想分享的内容,却总被繁琐的写作流程拖累。从资料收集、大纲梳理到内容生成和格式…...
Java虚拟线程调试黄金组合:jstack -l + jcmd VM.native_memory + JMC Thread Group视图(生产环境零侵入诊断法)
第一章:Java虚拟线程调试黄金组合:jstack -l jcmd VM.native_memory JMC Thread Group视图(生产环境零侵入诊断法)虚拟线程(Virtual Threads)作为 Project Loom 的核心特性,在高并发场景下显著…...
Pixel Couplet Gen应用场景:微信小程序‘灵蛇贺岁’互动模块开发全解析
Pixel Couplet Gen应用场景:微信小程序灵蛇贺岁互动模块开发全解析 1. 项目背景与核心价值 在传统节日数字化呈现的浪潮下,我们开发了"灵蛇贺岁"微信小程序互动模块。这款基于ModelScope大模型的春联生成器,通过创新的像素游戏风…...
OpenClaw安全方案:百川2-13B-4bits量化模型的本地化数据边界
OpenClaw安全方案:百川2-13B-4bits量化模型的本地化数据边界 1. 为什么我们需要本地化数据边界 去年我在帮一家初创公司做财务自动化方案时,遇到一个棘手问题:他们需要分析包含客户银行账号的Excel报表,但公司严格禁止数据上传到…...

注意:祖先是包括自身的!