代码随想录——删除二叉搜索树中的节点(Leetcode450)

news2024/11/27 5:39:25

题目链接
在这里插入图片描述

递归

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode deleteNode(TreeNode root, int key) {
    	// 如果当前的节点是空的,那么二叉搜索树也是空的,因此返回null。
        if(root == null){
            return null;
        }
        // 如果当前节点的值大于要删除的键值(key),递归地在左子树中删除键值。
        if(root.val > key){
            root.left = deleteNode(root.left,key);
            return root;
        }
        // 如果当前节点的值小于要删除的键值,递归地在右子树中删除键值。
        if(root.val < key){
            root.right = deleteNode(root.right,key);
            return root;
        }
        // 如果找到了要删除的键值,这里有几种情况需要处理
        if(root.val == key){
        	// 如果该节点没有子节点,可以直接删除该节点
            if(root.left == null && root.right == null){
                return null;
            }
            // 如果该节点只有右子节点,可以将根节点替换为它的右子节点
            if(root.right == null){
                return root.left;
            }
            // 如果该节点只有左子节点,可以将根节点替换为它的左子节点
            if(root.left == null){
                return root.right;
            }
            // 如果该节点既有左子节点又有右子节点,需要找到右子树中的最小值(或最大值,因为BST的右子树只包含大于当前节点的值)节点,将其移动到当前节点的位置,然后删除那个最小值(或最大值)节点在右子树中的位置。
            TreeNode successor = root.right;
            // 为此,需要找到这个最小值(或最大值)节点的左子节点,并将它复制到当前节点的右子节点,然后删除这个最小值(或最大值)节点。这个步骤通过递归地在右子树中查找最小值节点来实现。在找到这个节点后,需要将这个节点的右子树连接到当前节点原来的右子节点上,同时将这个最小值(或最大值)节点的左子树连接到当前节点上。
            while(successor.left != null){
                successor = successor.left;
            }
            root.right = deleteNode(root.right,successor.val);
            successor.right = root.right;
            successor.left = root.left;
            return successor;
        }
        return root;
    }
}

注意多种情况考虑

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

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

相关文章

在k8s中部署Logstash多节点示例(超详细讲解)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《洞察之眼&#xff1a;ELK监控与可视化》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Logstash简介 2、在K8s中部署Logstash多节点实例…

每日题库:Huawe数通HCIA——13

所有资料均来源自网络&#xff0c;但个人亲测有效&#xff0c;特来分享&#xff0c;希望各位能拿到好成绩&#xff01; PS&#xff1a;别忘了一件三连哈&#xff01; 今日题库&#xff1a; 186. 下列协议中属于动态IGP路由协议的是&#xff1f;-单选 A.stA.tiC. B.OSPF c…

GraphQL(3):参数类型与参数传递

1 基本参数类型 &#xff08;1&#xff09;基本类型:String,Int,Float,Boolean和ID。可以在shema声明的时候直接使用。 &#xff08;2&#xff09;[类型]代表数组&#xff0c;例如:[int]代表整型数组 2 参数传递 &#xff08;1&#xff09;和js传递参数一样&#xff0c;小括…

Sentinel1.8.6更改配置同步到nacos(项目是Gateway)

本次修改的源码在&#xff1a;https://gitee.com/stonic-open-source/sentinel-parent 一 下载源码 地址&#xff1a;https://github.com/alibaba/Sentinel/releases/tag/1.8.6 二 导入idea&#xff0c;等待maven下载好各种依赖 三 打开sentile-dashboard这个模块&#xf…

Linux 服务查询命令(包括 服务器、cpu、数据库、中间件)

Linux 服务查询命令&#xff08;包括 服务器、cpu、数据库、中间件&#xff09; Linux获取当前服务器ipLinux使用的是麒麟版本还是cenos版本Linux获取系统信息Linux获取CPU 的详细信息Linux查询nignx版本(非容器) Linux获取当前服务器ip hostname -ILinux使用的是麒麟版本还是…

SFML 小demo

文章目录 项目搭建代码实现main.cppobject.hsnake.hcommon.h 使用 demo 做到最后的话其实就只是验证了以前自己的一个想法&#xff0c;但是没有做成一个真正的游戏&#xff0c;可以算是一个 demo 而已吧&#xff0c;没做游戏的界面和关卡&#xff0c;不过完成了核心显式机制和功…

Day32 实现登录注册接口服务

​ 本章节,实现登录和注册接口服务 一.完善登录注册接口 完善登录和注册接口,对登录明文密码获取到MD5 字符串后,进行对比校验或注册明文密码进行MD5 加密后再插入到数据库。在MyToDo.Shared 项目中创建一个Extensions 文件夹,并创建一个 StringExtensions 静态扩展类,其中…

Redis学习(十二)Redis的三种删除策略

目录 一、背景二、Redis 的三种删除策略2.1 定时删除&#xff08;用CPU换内存空间&#xff09;2.2 定期删除2.3 惰性删除&#xff08;用内存换CPU性能&#xff09; 三、总结 一、背景 我们都知道 Redis 是一种内存数据&#xff0c;所有的数据均存储在内存中&#xff0c;可以通…

用于精准治疗和预防细菌感染的生物功能脂质纳米颗粒

引用信息 文 章&#xff1a;Biofunctional lipid nanoparticles for precision treatment and prophylaxis of bacterial infections. 期 刊&#xff1a;Science Advances&#xff08;影响因子&#xff1a;13.6&#xff09; 发表时间&#xff1a;2024年4月5日 作 者&a…

Deploy PostgreSQL12 for Centos 7

介绍 PostgreSQL是一种对象-关系型数据库管理系统&#xff0c;由加州大学伯克利分校计算机系开发&#xff0c;以POSTGRES&#xff0c;4.2版本为基础。 PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性&#xff0c;如复杂查询、外键、触发器、视图、事务完整性、多版…

C++ - 查找算法 和 其他 算法

目录 一. 查找算法&#xff1a; 1.顺序查找&#xff1a; 2.二分查找&#xff1a; 二. 其他算法&#xff1a; 1.遍历算法&#xff1a; 2.求和、求平均值等聚合算法。 a.求和算法&#xff1a; b.求平均值算法&#xff1a; 一. 查找算法&#xff1a; 1.顺序查找&#xff1…

【十大排序算法】冒泡排序

在排序的大海上&#xff0c;冒泡排序像一朵花朵般绽放&#xff0c; 每个元素都像是水珠&#xff0c;跃动在涟漪的波浪中。 它们轻轻上浮&#xff0c;与周围的元素相比较&#xff0c; 若自身更大&#xff0c;便悄然交换位置。 这是一场缓慢的舞蹈&#xff0c;每一步都小心翼翼&…

【工作流】 工作流相关概念及Activiti基本介绍

目录 工作流作用工作流的几个要素应用具体应用场景 工作流系统工作流系统的组成部分&#xff1a;都有哪些工作流系统 工作流引擎工作流引擎的特点&#xff1a;都有哪些工作流引擎 工作流、工作流引擎、工作流系统三者区别ActivitiActiviti的主要特点发展历史优缺点优点&#xf…

【Linux操作系统】进程状态(1)

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 Linux操作系统 进程状态 的相关内容。 如果看到最后您觉得这篇文章…

AXI Quad SPI IP核AXI4接口下的三种操作模式

当选择Enable Performance Mode选项时&#xff0c;AXI4接口包括在内。在该模式下&#xff0c;IP核可以在增强模式下操作&#xff08;未选择启用XIP模式&#xff09;或XIP模式&#xff08;选择启用XIP模式&#xff09;。在性能模式下&#xff0c;AXI4接口用于在DTR和DRR位置的突…

网络编程(UPD和TCP)

//发送数据 //UDP协议发送数据 package com.example.mysocketnet.a02UDPdemo;import java.io.IOException; import java.net.*;public class SendMessageDemo {public static void main(String[] args) throws IOException {//发送数据//1.创建DatagramSocket对象(快递公司)//…

机器学习-降维算法,PCK,LDA,NMF,LLE

目录 一:数据降维 二:PCA降维算法 1.概念 2.算法原理: 3.降维流程: 4.如何找到方差最大的方向 5.降维公式: 1.协方差和散度矩阵: 2.特征值分解矩阵原理 3.SVD分解矩阵原理 6.PCA算法的两种实现方法: 1.基于特征值分解协方差矩阵实现PCA算法 2. 基于SVD分解协…

面试成功的不二法门:详解Vue3答题章法

前言 面试题在网络上有如海洋之深&#xff0c;对于同一知识点&#xff0c;每个人的理解也各有千秋。我们在面试中常常会遇到一个瞬息间脑海里一片空白的情况&#xff0c;其实这并不是因为我们不懂&#xff0c;而是因为我们在回答的时候缺乏一个清晰的思路。那么问题来了&#x…

服务器远程连接工具有哪些?

【天联】是一款功能强大的服务器远程连接工具&#xff0c;它可以让用户通过网络远程连接到目标服务器&#xff0c;实现远程操作和管理。【天联】的使用场景非常广泛&#xff0c;特别适用于以下几个领域&#xff1a; 零售、收银软件应用的远程管理&#xff1a;【天联】可以结合医…

Ubuntu22.04之解决:terminal使用alt+1/alt+2/alt+3失效问题(二百三十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…