当前位置: 首页 > news >正文

【LeetCode+JavaGuide打卡】Day22|235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

学习目标:

  • 235. 二叉搜索树的最近公共祖先
  • 701.二叉搜索树中的插入操作
  • 450.删除二叉搜索树中的节点

学习内容:

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

题目链接&&文章讲解
给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

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

//递归法
//从上向下去递归遍历,第一次遇到 cur节点是数值在[q, p]区间中,那么cur就是 q和p的最近公共祖先。
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root == null) return null;//左if(root.val > p.val && root.val > q.val) {TreeNode left = lowestCommonAncestor(root.left, p, q);if(left != null) return left;}//右if(root.val < p.val && root.val < q.val) {TreeNode right = lowestCommonAncestor(root.right, p, q);if(right != null) return right;}return root;}
}//迭代法
class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {TreeNode cur = root;while(cur != null){if(cur.val > p.val && cur.val > q.val)  cur = cur.left;else if(cur.val < p.val && cur.val < q.val)  cur = cur.right;else return cur;}return null;}
}

701.二叉搜索树中的插入操作

题目链接&&文章讲解

//在叶子节点找到插入位置
class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {//终止条件if(root == null) {TreeNode node = new TreeNode(val);return node;}//左if(val < root.val){root.left = insertIntoBST(root.left, val);}//右if(val > root.val){root.right = insertIntoBST(root.right, val);}return root;}
}

450.删除二叉搜索树中的节点

题目链接&&文章讲解

有以下五种情况:

  • 第一种情况:没找到删除的节点,遍历到空节点直接返回了找到删除的节点
  • 第二种情况:左右孩子都为空(叶子节点),直接删除节点, 返回NULL为根节点
  • 第三种情况:删除节点的左孩子为空,右孩子不为空,删除节点,右孩子补位,返回右孩子为根节点
  • 第四种情况:删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点
  • 第五种情况:左右孩子节点都不为空,则将删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。
class Solution {public TreeNode deleteNode(TreeNode root, int key) {//终止条件//没有找到删除节点if(root == null) return null;//找到要删除的节点if(root.val == key){if(root.left ==null && root.right == null) return null;else if(root.left != null && root.right ==null) return root.left;else if(root.left == null && root.right !=null) return root.right;else  {TreeNode cur = root.right;while(cur.left != null) cur = cur.left;cur.left = root.left;return root.right;}}//处理逻辑if(key < root.val){root.left = deleteNode(root.left, key);}if(key > root.val){root.right = deleteNode(root.right, key);}return root;}
}

相关文章:

【LeetCode+JavaGuide打卡】Day22|235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

学习目标&#xff1a; 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点 学习内容&#xff1a; 235. 二叉搜索树的最近公共祖先 题目链接&&文章讲解 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最…...

Stable Diffusion WebUI 界面介绍

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 大家好,我是水滴~~ 本文主要对 Stable Diffusion WebUI 的界面进行简单的介绍,让你对该 WebUI 有个大致的了解,为后面的深入学习打下一个基础。主要内容包括:Stable Diffusion 模型(Stable Diffusion checkp…...

Cocos2dx-lua ScrollView[一]基础篇

一.ScrollView概述 cocos游戏中ScrollView控件大量使用,95%以上的项目都会使用ScrollView,个别游戏可能全部使用翻页的滑动效果。如果想要精通Cocos的UI开发,精通ScrollView控件非常关键,因此对ScrollView的使用进行总结很有必要。 下文缩写说明:sv = ScrollView, item代…...

QT应用软件【协议篇】周立功CAN接口卡代码示例

文章目录 USBCAN系列CAN接口卡规格参数资料下载QT引用周立功的库安装sdk代码USBCAN系列CAN接口卡 USBCAN系列CAN接口卡兼容USB2.0全速规范,可支持1/2/4/8路CAN接口。采用该接口卡,PC机可通过USB连入CAN网络,进行CAN总线数据采集和处理,主要具备以下几大优势特点: 支持车载…...

JVM对象的创建流程与内存分配

对象的创建流程与内存分配 创建流程对象内存分配方式内存分配安全问题对象内存分配流程【重要】:对象怎样才会进入老年代?重点 案例演示:对象分配过程大对象直接进入老年代02-对象内存分配的过程: 创建流程 加载 验证 解析 准备 初始化 使用 写在 对象内存分配方式 内存分配…...

docker (六)-进阶篇-数据持久化最佳实践MySQL部署

容器的数据挂载通常指的是将宿主机&#xff08;虚拟机或物理机&#xff09;上的目录或文件挂载到容器内部 MySQL单节点安装 详情参考docker官网文档 1 创建对应的数据目录、日志目录、配置文件目录(参考二进制安装&#xff0c;需自己建立数据存储目录) mkdir -p /data/mysq…...

力扣题目训练(17)

2024年2月10日力扣题目训练 2024年2月10日力扣题目训练551. 学生出勤记录 I557. 反转字符串中的单词 III559. N 叉树的最大深度241. 为运算表达式设计优先级260. 只出现一次的数字 III126. 单词接龙 II 2024年2月10日力扣题目训练 2024年2月10日第十七天编程训练&#xff0c;今…...

【react】react中和vue中的provide/inject、context写法示例

react写法 在 React 中&#xff0c;provide和inject的功能类似于 Vue.js 中的 provide和inject。它们都是用于跨组件层次传递数据的。 在 React 中&#xff0c;没有内置的 provide 和 inject 函数。但是&#xff0c;你可以使用 React 的 Context 来实现类似的功能。 Context…...

MySQL 的存储引擎(基本介绍)

文章目录 前言MySQL 的存储引擎介绍存储引擎是什么&#xff1f;存储引擎的特性? Innodb 与 Mylsam 的区别行级锁与表级锁是否支持事务是否支持恢复数据是否支持外键是否支持 MVCC 总结 前言 好文章不要错过&#xff0c;前两天跟大家分享的文章 1.MySQL的基础架构 2.SQL语句的…...

Unity3D 实现基于物理引擎的绳子关节解析详解

前言 在游戏开发中&#xff0c;有时候我们需要实现绳子关节效果&#xff0c;比如在射击游戏中射击绳子&#xff0c;或者在平衡游戏中使用绳子作为支撑。本文将详细介绍如何使用Unity3D的物理引擎实现绳子关节效果。 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;希…...

C语言二级易忘易错易混知识点(自用)

1.数组名不能自加。 因为数组名实际上是一个指针&#xff0c;指向数组的第一个元素的地址。数组名在编译器中被视为常量&#xff0c;它的值是固定的&#xff0c;不能改变。 要访问数组的不同元素&#xff0c;应该使用数组名加上偏移量的方式来访问。 2.共用体只有最后一次赋值…...

js_三种方法实现深拷贝

深拷贝&#xff08; 递归 &#xff09; 适用于需要完全独立于原始对象的场景&#xff0c;特别是当对象内部有引用类型时&#xff0c;为了避免修改拷贝后的对象影响到原始对象&#xff0c;就需要使用深拷贝。 // 原始对象 const obj { uname: Lily,age: 19,hobby: [乒乓球, 篮球…...

【图论经典题目讲解】CF715B - Complete The Graph

C F 715 B − C o m p l e t e T h e G r a p h \mathrm{CF715B - Complete\ The\ Graph} CF715B−Complete The Graph D e s c r i p t i o n \mathrm{Description} Description 给定一张 n n n 个点&#xff0c; m m m 条边的无向图&#xff0c;点的编号为 0 ∼ n − 1 0\…...

[office] excel中数据汇总的大全教程文字版 #知识分享#经验分享#知识分享

excel中数据汇总的大全教程文字版 我们在excel中对数据清单上的数据进行分析的一种方法是分类汇总。在“数据”菜单上选择“分类汇总”命令&#xff0c;我们可以在数据清单中插入分类汇总行&#xff0c;然后按照选择的方式对数据进行汇总。同时&#xff0c;在插入分类汇总时&am…...

leetcode经典题库(简单)

文章目录 1.两数之和2.反转链表3.合并两个有序列表4.合并两个有序链表5.删除有序数组中的重复项6.从数组中移除元素7. 搜索指定数值在数组中的插入位置8. 数组最后一位加一9. 合并两个有序数组在leetcode上刷了几个和数组相关的简单题,记录在这里。 1.两数之和 给定一个整数…...

python coding with ChatGPT 打卡第21天| 二叉树:最近公共祖先

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树&#xff1a;理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树&#xff1a;翻转…...

openGauss学习笔记-224 openGauss性能调优-系统调优-数据库系统参数调优-数据库并发队列参数调优

文章目录 openGauss学习笔记-224 openGauss性能调优-系统调优-数据库系统参数调优-数据库并发队列参数调优224.1 全局并发队列224.2 局部并发队列 openGauss学习笔记-224 openGauss性能调优-系统调优-数据库系统参数调优-数据库并发队列参数调优 数据库提供两种手段进行并发队…...

UE5 C++ 创建可缩放的相机

一.要将相机设置在Pawn类里 1.在MyPawn头文件里&#xff0c;加上摇臂和相机组件 #include "GameFramework/SpringArmComponent.h" #include "Camera/CameraComponent.h" 2.在Pawm里声明SceneComponet&#xff0c;SpringArmComponent,CameraComponent组件…...

Fabric中的溯源方法

背景 在Fabric链码中&#xff0c;我们可以使用PutState方法对一个key的值进行覆盖&#xff0c;当我们再使用GetState查询时是最新的值。如果我们希望找到这个key的修改记录&#xff0c;我们可以使用溯源方法GetHistoryForKey。完整源码链接&#xff1a;https://github.com/hyp…...

混子文章|蓝桥杯一题 -平方差

题目考点: 平方差 ,平方差奇偶关系 代码 #include<bits/stdc.h> #define Run 0 #define endl "\n" #define N 100005 using unl __int128_t; using ll long long; using namespace std; class Solution { public: void slove() {int sum 0;int L, R; cin &…...

内网渗透全流程拆解|从入门到实战,小白也能看懂的步骤

内网渗透不是“盲目尝试”&#xff0c;而是遵循固定流程的系统化操作&#xff0c;核心流程可概括为&#xff1a;信息收集→漏洞利用→权限提升→横向移动→权限维持→痕迹清理&#xff0c;每个环节环环相扣&#xff0c;缺一不可。本文将结合小白易理解的实战场景&#xff0c;详…...

嵌入式STM32开发者的Gitee协作指南:如何用.gitignore管好你的Hex和工程文件

嵌入式STM32开发者的Gitee协作指南&#xff1a;如何用.gitignore管好你的Hex和工程文件 在嵌入式开发领域&#xff0c;STM32系列微控制器的项目开发往往伴随着大量中间文件的生成——从Keil MDK编译产生的.hex、.axf&#xff0c;到STM32CubeIDE自动创建的Debug文件夹&#xff0…...

Kandinsky-5.0-I2V-Lite-5s实战:基于Dify平台构建无代码视频生成应用

Kandinsky-5.0-I2V-Lite-5s实战&#xff1a;基于Dify平台构建无代码视频生成应用 1. 引言&#xff1a;让图片动起来的零门槛方案 最近遇到不少朋友在问&#xff1a;有没有什么简单的方法&#xff0c;能让静态图片变成动态视频&#xff1f;传统方案要么需要专业视频编辑技能&a…...

微信QQ防撤回神器:RevokeMsgPatcher 2.1 终极使用教程

微信QQ防撤回神器&#xff1a;RevokeMsgPatcher 2.1 终极使用教程 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁&#xff08;我已经看到了&#xff0c;撤回也没用了&#xff09; 项目地址: https://gitcode.co…...

牙科手术显微镜市场:其中中国市场占比超15%

在口腔诊疗向精细化、微创化演进的进程中&#xff0c;牙科手术显微镜作为核心光学放大设备&#xff0c;凭借其高照度、高景深与高清晰度特性&#xff0c;成为提升根管治疗、牙周手术及种植修复等环节精准性的关键工具。该设备集成连续变倍观察、同轴照明、术野调焦及影像记录系…...

德意志飞机通过全球协作升级支线航空驾驶舱人机工学

2026年1月15日 —— 作为总部位于德国舍瑙的MAFELEC集团旗下成员&#xff0c;COMTRONIC GmbH近五十年来一直是航空航天领域人机界面&#xff08;HMI&#xff09;解决方案领域值得信赖的供应商。凭借在照明面板、定制键盘及先进光学技术方面的深厚积淀&#xff0c;COMTRONIC长期…...

从选型到焊接:一份给嵌入式新手的晶振避坑指南(含32.768KHz实例)

从选型到焊接&#xff1a;嵌入式开发者的晶振实战避坑手册 第一次点亮自己设计的电路板时&#xff0c;那颗小小的晶振就像电子世界的心跳起搏器。记得三年前我为一个智能家居项目调试STM32时&#xff0c;连续三天卡在"晶振不起振"的问题上——电路图反复检查无误&…...

掌握QMK Toolbox的4个实战阶段:开源键盘定制工具从入门到精通的学习路径

掌握QMK Toolbox的4个实战阶段&#xff1a;开源键盘定制工具从入门到精通的学习路径 【免费下载链接】qmk_toolbox A Toolbox companion for QMK Firmware 项目地址: https://gitcode.com/gh_mirrors/qm/qmk_toolbox QMK Toolbox是一款专为机械键盘定制开发的开源工具&a…...

MStar-Bin-Tool-Master中文版|晨星芯片BIN固件解包/封包工具(适配机顶盒与智能电视)

温馨提示&#xff1a;文末有联系方式工具简介 MStar-Bin-Tool-Master中文增强版是一款专为晨星&#xff08;MStar&#xff09;系列主控芯片设计的固件解析与重构工具&#xff0c;全面支持主流机顶盒与智能液晶电视所用BIN格式刷机包&#xff0c;提供直观易用的图形化操作界面&a…...

前端 HTML 转 PDF

spdf 两个库转换成 PDF 文件并下载到本地。 简单说&#xff1a;它能让用户 “一键下载” 网页上的某个区域为 PDF&#xff08;比如报表、数据统计页、合同预览页等&#xff09;&#xff0c;还预留了 “水印功能” 的注释代码&#xff08;可按需启用&#xff09;。 核心依赖说…...