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

代码随想录算法训练营第22天|235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

目录

  • 一、力扣235.二叉搜索树的最近公共祖先
    • 1.1 题目
    • 1.2 思路
    • 1.3 代码
  • 二、力扣701.二叉搜索树中的插入操作
    • 2.1 题目
    • 2.2 思路
    • 2.3 代码
  • 三、力扣450.删除二叉搜索树中的节点
    • 3.1 题目
    • 3.2 思路
    • 3.3 代码
    • 3.4 总结

一、力扣235.二叉搜索树的最近公共祖先

1.1 题目

在这里插入图片描述

1.2 思路

利用二叉搜索树的有序特性来实现:
如果cur大于pq:向左搜索;
如果cur小于pq:向右搜索;
如果介于两者之间:则找到!

1.3 代码

递归法:

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {//递归法if(root == null){return null;}return traversal(root,p,q);}public TreeNode traversal(TreeNode root,TreeNode p,TreeNode q){//和上题类似,第二种情况也包含在了处理逻辑里if(root.val < p.val && root.val < q.val){return traversal(root.right,p,q);}if(root.val > p.val && root.val > q.val){return traversal(root.left,p,q);}//当前节点介于[p,q]  闭区间return root;}
}

迭代法:

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {//迭代if(root == null){return null;}TreeNode cur = root;while(true){if(cur.val > p.val && cur.val > q.val){cur = cur.left;continue;}if(cur.val < p.val && cur.val < q.val){cur = cur.right;continue;}return cur;}}
}

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

2.1 题目

在这里插入图片描述

2.2 思路

根据二叉搜索树的特性,比大小向下遍历,直到找到null,将其new一个新的结点插入进去。

2.3 代码

自己的思路:

class Solution {public TreeNode newnode;public TreeNode insertIntoBST(TreeNode root, int val) {//比大小来遍历寻找该插入的位置if(root == null){return new TreeNode(val);}traversal(root,val);return root;}public void traversal(TreeNode root,int val){if(val > root.val){if(root.right == null){newnode = new TreeNode(val);root.right = newnode;return;}traversal(root.right,val);}if(val < root.val){if(root.left == null){newnode = new TreeNode(val);root.left = newnode;return;}traversal(root.left,val);}}
}

三、力扣450.删除二叉搜索树中的节点

3.1 题目

在这里插入图片描述

3.2 思路

梳理本题的五种情况:
(1)没有找到该节点
(2)找到了该节点,该节点的左右孩子均为空
(3)找到了该节点,该节点的左孩子为空,右孩子不为空
(4)找到了该节点,该节点的左孩子不为空,右孩子为空
(5)找到了该节点,该节点的左右孩子均不为空(最关机键的点):见下图

3.3 代码

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{//假设root的右子树上位,那么需要将root的左子树插入root的右子树中,再返回右子树TreeNode cur = root.right;while(cur.left != null){cur = cur.left;}cur.left = root.left;return root.right;}}//单层递归逻辑if(key > root.val){root.right = deleteNode(root.right,key);}if(key < root.val){root.left = deleteNode(root.left,key);}return root;}
}

3.4 总结

(1)五种情况的分析;(递归终止条件)
(2)不用双指针pre,而是将处理后的结点回溯返回给上层节点接住。(单层递归逻辑)

相关文章:

代码随想录算法训练营第22天|235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

目录 一、力扣235.二叉搜索树的最近公共祖先1.1 题目1.2 思路1.3 代码 二、力扣701.二叉搜索树中的插入操作2.1 题目2.2 思路2.3 代码 三、力扣450.删除二叉搜索树中的节点3.1 题目3.2 思路3.3 代码3.4 总结 一、力扣235.二叉搜索树的最近公共祖先 1.1 题目 1.2 思路 利用二叉…...

基于SpringBoot的医护人员排班系统详细开题报告(源码)

项目源码&#xff1a;https://gitee.com/oklongmm/biye2​ 引言 医护人员排班系统是医疗机构中的重点管理工作之一。借助现代化的计算机技术&#xff0c;可以大大提升排班的效率和精准度。因此&#xff0c;本研究旨在使用SpringBoot框架设计和实现一个功能完善的医护人员排班…...

CDH6.3.1离线安装

一、从官方文档整体认识CDH 官方文档地址如下&#xff1a; CDH Overview | 6.3.x | Cloudera Documentation CDH是Apache Hadoop和相关项目中最完整、测试最全面、最受欢迎的发行版。CDH提供Hadoop的核心元素、可扩展存储和分布式计算&#xff0c;以及基于Web的用户界面和重…...

Pytorch之卷积操作

卷积是一种基本的数学操作&#xff0c;常用于信号处理和图像处理领域。在计算机视觉中&#xff0c;卷积操作是一种重要的技术&#xff0c;用于提取图像的特征并进行图像处理。 卷积操作基于一个卷积核&#xff08;也称为滤波器或权重&#xff09;&#xff0c;它是一个小的矩阵…...

2024年春招小红书前端实习面试题分享

文章目录 导文面试重点一、方便介绍一下&#xff0c;你之前实习都做了什么嘛&#xff1f;二、 可以讲一下封装组件相关逻辑嘛&#xff1f;1. 为什么要封装组件&#xff1f;2. 封装组件的步骤3. 封装组件的原则4. 组件的复用和扩展5. 组件的维护和文档 三、项目的性能优化你有什…...

软件测试--性能测试工具JMeter

软件测试--性能测试工具JMeter 主流性能测试工具1.主流性能测试工具Loadrunner和Jmeter对比 —— 相同点2.主流性能测试工具Loadrunner和Jmeter对比 —— 不同点JMeter基本使用JMeter环境搭建1.安装JDK:2.安装Jmeter:3.注意点:JMeter功能概要1. JMeter文件目录介绍1.1 bin目…...

c++/c图的邻近矩阵表示

#include<iostream> using namespace std;#define MaxVerterNum 100 typedef char VerterType; typedef int EdgeType; typedef struct {VerterType vexs[MaxVerterNum]; // 存储顶点EdgeType edges[MaxVerterNum][MaxVerterNum]; // 存储邻接矩阵int n, e; // 顶点数和边…...

cocos-lua定时器用法

本文介绍cocos-lua(非Quick-cocos)的定时器用法 定时器按是否会随节点销毁&#xff0c;可分为节点调度器和全局调度器 一.节点调度器 frameworks\cocos2d-x\cocos\scripting\lua-bindings\script\cocos2d\deprecated.lua中实现了了schedule和 performWithDelay 1.1.schedul…...

激活函数Swish(ICLR 2018)

paper&#xff1a;Searching for Activation Functions 背景 深度网络中激活函数的选择对训练和任务表现有显著的影响。目前&#xff0c;最成功和最广泛使用的激活函数是校正线性单元&#xff08;ReLU&#xff09;。虽然各种手工设计的ReLU替代方案被提出&#xff0c;但由于在…...

【C++ 标准流,文件流】

C 标准流&#xff0c;文件流 ■ 标准输入&#xff0c;输出流&#xff0c;■ 文件流&#xff08;ofstream写入&#xff0c;ifstream读取&#xff0c;fstream创建-写入-读取&#xff09;■ open()■ ofstream■ ifstream■ 流插入<<■ 文件位置指针 ■ 标准输入&#xff0c…...

【排序】详解冒泡排序

一、思想 冒泡排序的基本思想是利用两两比较相邻记录的方式&#xff0c;通过一系列的比较和交换操作&#xff0c;使得较大或较小的元素逐渐移动到数列的一端。在每一轮的排序过程中&#xff0c;都会从数列的起始位置开始&#xff0c;对相邻的元素进行比较&#xff0c;如果它们…...

什么是Docker容器?

Docker是一种轻量级的虚拟化技术&#xff0c;同时是一个开源的应用容器运行环境搭建平台&#xff0c;可以让开发者以便捷方式打包应用到一个可移植的容器中&#xff0c;然后安装至任何运行Linux或Windows等系统的服务器上。相较于传统虚拟机&#xff0c;Docker容器提供轻量化的…...

(C++练习)选择题+编程题

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 选择题 以下程序输出结果是什么&#xff08;&#xff09; class A{public:virtual void func(int val 1){ std::cout<<"A->"<< val <<std::endl;}virtual void test(){ func();}};class B…...

【鸿蒙开发】第十五章 ArkTS基础类库-并发

1 简述 并发是指在同一时间段内&#xff0c;能够处理多个任务的能力。为了提升应用的响应速度与帧率&#xff0c;以及防止耗时任务对主线程的干扰&#xff0c;OpenHarmony系统提供了异步并发和多线程并发两种处理策略&#xff0c;ArkTS支持异步并发和多线程并发。并发能力在多…...

华为数通方向HCIP-DataCom H12-821题库(多选题:21-40)

第21题 管理员在配置 VRRP 时,下面哪些不是必须配置的? A.抢占模式 B.抢占延时 C.虚拟IP 地址 D.虚拟路由器的优先级 【参考答案】ABD 【答案解析】 VRRP的作用之一是提供一个虚拟的IP地址,用作默认网关,用来实现冗余和故障转移。因此,配置虚拟IP地址是必须的。华为设备vr…...

【简单模拟】第十三届蓝桥杯省赛C++ B组《刷题统计》(c++)

1.题目描述 小明决定从下周一开始努力刷题准备蓝桥杯竞赛。 他计划周一至周五每天做 a 道题目&#xff0c;周六和周日每天做 b 道题目。 请你帮小明计算&#xff0c;按照计划他将在第几天实现做题数大于等于 n 题&#xff1f; 2.输入格式 输入一行包含三个整数 a,b 和 n。…...

IO-DAY3

使用read和write实现文件夹拷贝功能 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<unistd.h> #include<sys/types.h> #include<sys/stat.h> #include<fcntl.h> #include<dirent.h> int main(int argc,…...

python实现常见一元随机变量的概率分布

一. 随机变量 随机变量是一个从样本空间 Ω \Omega Ω到实数空间 R R R的函数&#xff0c;比如随机变量 X X X可以表示投骰子的点数。随机变量一般可以分为两类&#xff1a; 离散型随机变量&#xff1a;随机变量的取值为有限个。连续型随机变量&#xff1a;随机变量的取值是连…...

微服务学习

SpringCloud组成 服务注册与发现&#xff1a;consul 阿里Nacos 服务调用和负载均衡&#xff1a;OpenFeign LoadBalance 分布式事务&#xff1a;阿里Seata 服务熔断和降级:阿里Sentinel Circuit Breaker 服务链路追踪&#xff1a;Micrometer Tracing 服务网关&#xff1a;GateWa…...

【.NET Core】深入理解IO - 读取器和编写器

【.NET Core】深入理解IO - 读取器和编写器 文章目录 【.NET Core】深入理解IO - 读取器和编写器一、概述二、BinaryReader和BinaryWriter2.1 BinartReader类2.2 BinaryWriter类 三、StreamReader和StreamWriter3.1 StreamReader类3.1 StreamWriter类StreamWriter类构造函数Str…...

终极指南:如何为Alignment Handbook项目做出技术贡献

终极指南&#xff1a;如何为Alignment Handbook项目做出技术贡献 【免费下载链接】alignment-handbook Robust recipes to align language models with human and AI preferences 项目地址: https://gitcode.com/gh_mirrors/al/alignment-handbook Alignment Handbook 是…...

pg_activity快速入门:如何在5分钟内开始监控PostgreSQL服务器

pg_activity快速入门&#xff1a;如何在5分钟内开始监控PostgreSQL服务器 【免费下载链接】pg_activity pg_activity is a top like application for PostgreSQL server activity monitoring. 项目地址: https://gitcode.com/gh_mirrors/pg/pg_activity PostgreSQL数据库…...

关系型数据库星型模型聚合表生成

在关系型数据库&#xff08;MySQL、Oracle、SQL Server等&#xff09;中&#xff0c;通过星型模型模拟多维分析结构&#xff0c;高效生成聚合表&#xff0c;解决报表查询慢、多维分析繁琐、实时计算压力大等核心痛点。 一、前置基础 星型模型是关系型数据库模拟多维结构的最优方…...

SimWorks FDTD仿真结果可视化:从监视器数据到专业图表,手把手教你避开插值陷阱

SimWorks FDTD仿真结果可视化&#xff1a;从监视器数据到专业图表&#xff0c;手把手教你避开插值陷阱 电磁仿真工程师们常遇到这样的困境&#xff1a;明明仿真设置无误&#xff0c;计算结果却与预期存在微妙差异。问题的根源往往不在仿真过程本身&#xff0c;而在于后处理阶段…...

BROADCOM博通集成 Matter 1.5平台认证就绪、BK7239N等芯片助力智能家居无缝融合

博通集成多款Wi-Fi SoC的Matter SDK平台已全面完成对Matter v1.5标准的支持&#xff0c;并通过Matter兼容性平台认证。此举标志着Beken芯片方案持续可为客户提供“开箱即用”的Matter开发体验&#xff0c;助力设备制造商高效推出符合最新统一标准的智能产品。随着Matter生态的快…...

Gerbv:免费开源Gerber文件查看器的终极指南,PCB设计验证的得力助手

Gerbv&#xff1a;免费开源Gerber文件查看器的终极指南&#xff0c;PCB设计验证的得力助手 【免费下载链接】gerbv Maintained fork of gerbv, carrying mostly bugfixes 项目地址: https://gitcode.com/gh_mirrors/ge/gerbv 你是否曾经为PCB设计文件的查看而烦恼&#…...

大麦网抢票自动化工具:5分钟快速上手完整指南

大麦网抢票自动化工具&#xff1a;5分钟快速上手完整指南 【免费下载链接】damaihelper 支持大麦网&#xff0c;淘票票、缤玩岛等多个平台&#xff0c;演唱会演出抢票脚本 项目地址: https://gitcode.com/gh_mirrors/dam/damaihelper 你是否曾经因为抢不到心仪的演唱会门…...

跨平台游戏模组下载终极指南:WorkshopDL免Steam资源获取工具

跨平台游戏模组下载终极指南&#xff1a;WorkshopDL免Steam资源获取工具 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否曾在Epic Games平台游玩《无主之地3》时&#xf…...

HoYo-Glyphs:11款米哈游架空文字字体,免费开启你的游戏世界创作之旅

HoYo-Glyphs&#xff1a;11款米哈游架空文字字体&#xff0c;免费开启你的游戏世界创作之旅 【免费下载链接】HoYo-Glyphs Constructed scripts by HoYoverse 米哈游的架空文字 项目地址: https://gitcode.com/gh_mirrors/ho/HoYo-Glyphs 你是否曾幻想过用《原神》中蒙德…...

新手福音:通过快马AI生成代码学习下拉词功能实现原理

今天想和大家分享一个特别适合前端新手练手的小项目——实现一个基础的下拉词搜索框。这个功能看似简单&#xff0c;但涵盖了事件监听、数组过滤、DOM操作等前端开发的核心概念。我自己在学习过程中发现&#xff0c;通过实际动手实现一个小功能&#xff0c;比单纯看理论要容易理…...