代码随想录:二叉树29-30

目录

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

题目

代码(迭代法走一边)

代码(递归法走一边)

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

题目

代码(递归法走一边)


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

题目

给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。

注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。

示例 1:

输入:root = [4,2,7,1,3], val = 5
输出:[4,2,7,1,3,5]

代码(迭代法走一边)

class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {TreeNode pre = null;TreeNode cur = root;//如果树为空,单独处理(这个不能漏,不然后面pre.val编译会出错)if(root == null){return new TreeNode(val);}//不断进行左右子树判断,使得pre指向插入节点的父节点,cur正好为nullwhile(cur != null){if(cur.val > val){pre = cur;cur = cur.left;}else if(cur.val < val){   //注意这里必须有else,不然会出错因为cur会改变pre = cur;cur = cur.right;}}TreeNode newNode = new TreeNode(val);//如果父节点小,就往左子树插入if(pre.val > val){pre.left = newNode;}//如果父节点大,就往右子树插入else{pre.right = newNode;}return root;  //返回根节点}
}

代码(递归法走一边)

class Solution {//遍历的逻辑是自上而下,根据val的大小往一个左or右子树走public TreeNode insertIntoBST(TreeNode root, int val) {//终止条件,说明root已经走到插入元素的节点位置了if(root == null){return new TreeNode(val);}//走一边的单层逻辑if(root.val > val){root.left = insertIntoBST(root.left,val); //插在左子树上,修改左子树}else if(root.val < val){root.right = insertIntoBST(root.right,val);  //插在右子树上,修改右子树}return root;  //返回中间节点}
}

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

题目

给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。

一般来说,删除节点可分为两个步骤:

  1. 首先找到需要删除的节点;
  2. 如果找到了,删除它。

示例 1:

输入:root = [5,3,6,2,4,null,7], key = 3
输出:[5,4,6,2,null,null,7]

代码(递归法走一边)

class Solution {public TreeNode deleteNode(TreeNode root, int key) {//终止条件if(root == null){return null;}//走一边单层逻辑(自上而下递归)//如果key比root中值小,说明要修改左子树,往左子树走if(root.val > key){root.left = deleteNode(root.left,key); //修改左子树指针 }//如果key比root中值大,说明要修改右子树,往右子树走if(root.val < key){root.right = deleteNode(root.right,key); //修改右子树指针}//如果key等于root中值,说明找到了删除节点if(root.val == key){//情况1:删除节点root是叶子节点if(root.left == null && root.right == null){return null;  //返回null,代表直接删除root}//情况2:删除节点root只有左子树else if(root.left != null && root.right == null){return root.left;  //返回其左子树,代表删除了root}//情况3:删除节点root只有右子树else if(root.left == null && root.right != null){return root.right; //返回其右子树,代表删除了root}//情况4:删除节点root有左右子树else{TreeNode cur = root.right;  //cur是删除节点的右孩子while(cur.left != null){cur = cur.left;  //cur一直走到最左下节点}cur.left = root.left;  //把删除节点的左子树挂到删除节点右子树的最左下角return root.right; //返回其右子树,代表删除了root,且删除节点的左子树已经挂到右子树了}}return root;  //返回根节点}
}

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

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

相关文章

【软考高项】二十七、范围管理6个过程

一、规划范围管理 1、定义、作用 定义&#xff1a;为了记录如何定义、确认和控制项目范围及产品范围&#xff0c;而创建范围管理计划的过程作用&#xff1a;在整个项目期间对如何管理范围提供指南和方向 2、输入 项目章程 项目管理计划&#xff1a;质量管理计划、项目生命周…

编程本源

文章目录 引言编程的本质工作与编程编程的未来 引言 知乎上有一个热门的问题&#xff0c;什么是人生的顶级享受&#xff1f; 看到这个问题我回想到了多年前&#xff0c;那个炎热的午后&#xff0c;我在学校的图书馆里&#xff0c;一边参照书籍&#xff0c;一边用着一部破旧的t…

使用STM32CubeMX对STM32F4的CAN1/2/3配置及接收中断开启

目录 1. CAN配置1.1引脚&#xff08;STM32F413VGT6-LQFP100&#xff09;1.2 时钟1.3 RCC配置1.4 CAN1配置1.5 CAN2配置1.6 CAN3配置1.7 输出设置 2. CAN代码2.1 CAN初始化2.2 CAN滤波器设置2.3 CAN使能2.4 激活中断2.5 CAN发送函数2.6 CAN回调函数2.7 main之后的代码 1. CAN配置…

linux下的mysql8.0安装

首先下载mysql8.0压缩包 mysql8.0下载地址: https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-linux-glibc2.12-i686.tar.xz # 下载 wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.13-linux-glibc2.12-i686.tar.xz# 解压 tar zxvf mysql-8.0.11…

Node.js使用

Node.js是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;它使得JavaScript能够脱离浏览器&#xff0c;直接在服务器端运行。Node.js的异步I/O模型使其在处理高并发请求时表现出色&#xff0c;适用于构建网络应用、实时应用等。以下是对Node.js使用的总结&#xff1a; …

【无监督+自然语言】 GPT,BERT, GPT-2,GPT-3 生成式预训练模型方法概述 (Generative Pre-Traning)

主要参考 【GPT&#xff0c;GPT-2&#xff0c;GPT-3 论文精读【李沐论文精读】-2022.03.04】 https://www.bilibili.com/video/BV1AF411b7xQ/ 大语言模型综述&#xff1a; https://blog.csdn.net/imwaters/article/details/137019747 GPT与chatgpt的关系 图源&#xff1a;L…

java多功能手机

随着科技的发展&#xff0c;手机的使用已经普及到每个家庭甚至个人&#xff0c;手机的属性越来越强大&#xff0c;功能也越来越多&#xff0c;因此人们在生活中越来越依赖于手机。 任务要求&#xff0c;使用所学知识编写一个手机属性及功能分析程序设计&#xff0c;测试各个手机…

使用Uiautomotorviewer无法获取手机页面元素+解决办法

在进行 Android 应用程序开发或测试时&#xff0c;有时会遇到以下错误&#xff1a; Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException这个错误可能会导致开发或测试过程中的一些困扰&#xff0c;但有一个简单的解决方法&#xff1a; 解决方法…

JEECG/SpringBoot集成flowable流程框架

IDEA安装Flowable BPMN visualizer插件 pom.xml中引入flowable相关依赖 <dependency><groupId>org.flowable</groupId><artifactId>flowable-spring-boot-starter</artifactId><version>6.7.2</version></dependency><depe…

PHP 错误 Unparenthesized `a ? b : c ? d : e` is not supported

最近在一个新的服务器上测试一些老代码的时候得到了类似上面的错误&#xff1a; [Thu Apr 25 07:37:34.139768 2024] [php:error] [pid 691410] [client 192.168.1.229:57183] PHP Fatal error: Unparenthesized a ? b : c ? d : e is not supported. Use either (a ? b : …

Docker镜像和容器操作

目录 一.Docker镜像创建与操作 1. 搜索镜像 2. 获取镜像 3. 镜像加速下载 4. 查看镜像信息 5. 查看下载的镜像文件信息 ​编辑6. 查看下载到本地的所有镜像 7. 根据镜像的唯一标识ID号&#xff0c;获取镜像详细信息 8. 为本地的镜像添加新的标签 9. 删除镜像 10. 存入…

【Prometheus】了解你的Prometheus指标

简单Prometheus查询用于指标检查 作者&#xff1a;Michal Kazmierczak 来源&#xff1a;mkaz.me 基数是关键。 它很容易失控&#xff0c;就像任何组合爆炸的实例一样。 这&#xff0c;再加上90%的指标从未被访问过的说法&#xff0c;创造了一个值得探索的领域。 观察性云供应…

复杂Python代码看不懂,分享两个工具!

复杂Python代码看不懂&#xff0c;分享两个工具&#xff0c;事半功倍&#xff01; Ryven Ryven是一个Python代码可视化工具&#xff01; 精进地址&#xff1a;https://github.com/leon-thomm/Ryven 一些案例&#xff0c; Ryven可视化操作矩阵 Ryven可视化冒泡排序算法 Ryv…

React Native 复杂列表开发与性能优化全攻略(现在看为时不晚!)

​ ​微信公众号&#xff1a;小武码码码 大家好,上一篇分享了 Flutter复杂列表开发与性能优化全攻略。那接下来这一篇,我想和大家分享一下在 React Native 中开发复杂列表的经验和心得。作为移动开发中最常见的 UI 组件之一,列表几乎出现在每一个应用中。然而,当列表变得复杂起…

设计模式- 装饰器模式(Decorator Pattern)结构|原理|优缺点|场景|示例

设计模式&#xff08;分类&#xff09; 设计模式&#xff08;六大原则&#xff09; 创建型&#xff08;5种&#xff09; 工厂方法 抽象工厂模式 单例模式 建造者模式 原型模式 结构型&#xff08;7种&#xff09; 适配器…

JavaScript模块化编程:构建高效、可维护的代码结构

引言 JavaScript 模块是现代前端开发中的重要组成部分。它们允许开发者将代码组织成独立、可重用的单元&#xff0c;从而提高了代码的可维护性、可扩展性和可读性。本文将深入探讨 JavaScript 模块的概念、语法和最佳实践&#xff0c;帮助你充分利用模块化开发的优势。 模块的…

Three.js和Cesium.js中坐标

在了解Three.js和Cesium.js前先了解并弄清楚图形学关于空间的基本概念流程&#xff1a; 计算机图形学 图形学中涉及到多个坐标空间&#xff0c;这些空间之间的变换是图形渲染中的核心部分。下面是一些常见的图形学空间及其变换顺序&#xff1a; 对象空间&#xff08;Object Sp…

Python快速入门1数据类型(需要具有编程基础)

数据类型&#xff1a; Python 3.0版本中常见的数据类型有六种&#xff1a; 不可变数据类型可变数据类型Number&#xff08;数字&#xff09;List&#xff08;列表&#xff09;String&#xff08;字符串&#xff09;Dictionary&#xff08;字典&#xff09;Tuple&#xff08;元…

【InternLM】基于弱智吧数据的微调数据构造实验

1. 数据处理流程 在AI领域有句名言&#xff1a;数据和特征决定了机器学习的上限&#xff0c;而模型和算法只是逼近这个上限而已。可见数据对整个AI的决定性影响&#xff0c;在模型开源化的今天&#xff0c;很多厂商的模型结构都大同小异&#xff0c;那影响最终模型的一大决定因…

学习redis知识点

学习 Redis 时&#xff0c;可以按照以下分类来组织知识点&#xff1a; 核心概念 内存数据库&#xff1a;理解 Redis 作为内存数据库的特点和限制。数据结构&#xff1a;熟悉 Redis 支持的数据结构&#xff0c;如字符串、列表、集合、有序集合和散列。 数据类型及操作 字符串…