LeetCode450. 删除二叉搜索树中的节点(Java)

450.删除二叉搜索树中的节点 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 说明: 要求算法时间复杂度为 O(h),h 为树的高度。 示例: root = [5,3,6,2,4,null,7] key = 3... 阅读详情

题目:

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

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

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

说明: 要求算法时间复杂度为 O(h),h 为树的高度。

示例:
在这里插入图片描述
代码:

  • 解法一
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode deleteNode(TreeNode root, int key) {
        if(root==null){
            return null;
        }
        if(root.val>key){
           root.left=deleteNode(root.left,key);
        }else if(root.val<key){
            root.right=deleteNode(root.right,key);
        }else{
            if(root.left==null){
                TreeNode rightNode=root.right;
                root.right=null;
                return rightNode;
            }
            if(root.right==null){
                TreeNode leftNode=root.left;
                root.left=null;
                return leftNode;
            }
            //要删除的结点左右子树都有时
                TreeNode newcurNode=minmum(root.right);
                newcurNode.right=removeMin(root.right);
                newcurNode.left=root.left;
                root.left=root.right=null;
                return newcurNode;
        }
        return root;
    }
    public TreeNode search(TreeNode root,int key){  //搜索元素
        if(root==null){
            return null;
        }
        if(root.val>key){
            search(root.left,key);
        }else if(root.val<key){
            search(root.right,key);
        }else{
            return root;
        }
        return null;
    }
    public TreeNode minmum(TreeNode node){  //获取最小结点
        if(node.left==null){
            return node;
        }else{
            return minmum(node.left);
        }
    }
    public TreeNode removeMin(TreeNode node){   //删除最小结点
        TreeNode cur=minmum(node);
        if(node.left==null){
            TreeNode rightNode=node.right;
            node.right=null;
            return rightNode;
        }
        node.left=removeMin(node.left);
        return node;
    }
}
  • 别人的代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode deleteNode(TreeNode root, int key) {
        if(root==null) return null ;
        if(root.val>key) root.left=deleteNode(root.left,key);
        else if(root.val<key) root.right = deleteNode(root.right,key);
        else {
            
            if(root.left==null) return root.right;
            if(root.right==null) return root.left;
            
            TreeNode rightmin = findmin(root.right);
            root.val = rightmin.val;
            root.right = deleteNode(root.right,root.val);
        }
        return root;
    }
    private TreeNode findmin(TreeNode root){	//寻找最小结点
        while(root.left!=null)
            root=root.left;
        return root;
    }    
}
LeetCode 0450.删除二叉搜索树中的节点【Go】 LeetCode 0450.删除二叉搜索树中的节点 阅读详情

相关推荐

欧姆龙PLC EIP通讯配置方法

欧姆龙EIP通讯配置方法

weixin_59671695的博客 6146

二叉树:删除二叉搜索树中的节点

然后开始从最底下一层往上传值,下面一层返回的值,其实是上面一个层函数的组成部分,同样,上面一层函数返回的值又是上上面一层函数的组成部分。那按照同样的思路,最底下一层调用递归函数传入的参数会是2这个结点的左子树,也就是。到这里就讲解完毕了,如果还是不明白,结合思路,代码,将这个例子自己理一遍思路。我们在组织代码的时候,脑子里要有向下寻找的过程,更要有一层一层向上回溯的过程。对于1,没找到,说明树不会被修改,将原来的树原封不动返回。对于2,找到了,肯定返回的是最终删除了指定元素的树。

qq_43591406的博客 2722

【VS2017】“LNK1104 cannot open file ‘python39_d.lib‘ “

记录一下编译调用了python代码的C语言源程序时遇到的问题 版本:以python3.9.1为例 先确保你安装了python的debug版本,如果没有,用对应版本安装包可以修改已经安装的python,如图。 选择 “Modify” 选择next 确保最后一项勾选,然后install。 光安装了还不够,需要配置一下C语言编译器。 以VS2017为例: 将python37_d.lib(在安装目录下的libs文件夹里有python39_d.lib)所在文件夹的路径添加到库目录里面,右键你的解决方案,选.

m0_46296905的博客 6478

二叉搜索树

#include <iostream> #include <cstdlib> #include <string> #include <cstdio> using namespace std; struct node{ int key; node *r,*l,*p; }; node *root,*NIL; void insert(int k){ node *x=root; node *y=NIL; node *z

WOF_Spark的博客 385

【强化学习】11 —— Double DQN算法与Dueling DQN算法

可以看到由于数据点的分布,使得拟合出的价值函数无法与真实的价值函数吻合,甚至在部分区域产生了明显的偏差。Dueling DQN 是 DQN 另一种的改进算法,它在传统 DQN 的基础上只进行了微小的改动,但却能大幅提升 DQN 的表现。这样,即使其中一套神经网络的某个动作存在比较严重的过高估计问题,由于另一套神经网络的存在,这个动作最终使用的值不会存在很大的过高估计问题。.在同一个状态下,所有动作的优势值之和为 0,因为所有动作的动作价值的期望就是这个状态的状态价值。环境的状态包括倒立摆角度的正弦值。

sinat_52032317的博客 1万+

基于大模型的脑疝全流程预测与诊疗方案研究

目录一、引言1.1 研究背景与目的1.2 研究意义1.3 大模型技术概述二、脑疝概述2.1 定义与分类2.2 发病机制与病因2.3 临床表现2.4 诊断方法三、大模型在脑疝预测中的应用3.1 数据采集与预处理3.2 模型训练与选择3.3 模型验证与优化四、术前预测与评估4.1 病情严重程度预测4.2 手术风险预测4.3 个性化手术方案制定4.4 麻醉方案制定五、术中监测与决策5.1 实时监测指标5.2 大模型辅助决策5.3 应对突发情况六、术后评估与护理6.1 术后恢复情况评估6.2 并发症风险预测与预防6

嵌入式毕设/课设资料清单(速查手册·文档模板·题库,持续更新)→ 见最新文章 1286

二叉树--删除二叉搜索树的结点

二叉树搜索树 删除(Delete)二叉搜索树上的任意一个节点 原理 我们将删除结点的情况 分为三种 1.NO child 被删除节点是叶子结点 因为叶子结点没有孩子 可以直接删除 我们只需要将结点释放内存在讲这个空地址 return 回去就好了 One child 结点只有一个孩子,无论是这个孩子是左孩子 还是右孩子 因为只有一个孩子 我们只需要将 root(被删除的结点) = root->child 指针root 移动到他自身唯一的孩子去 跳过这个被删除的结点 最后返回root-&

weixin_43876821的博客 1428

基于XGBoost的混凝土力学性能预测系统

本文介绍了一个基于XGBoost算法的混凝土力学性能预测系统。该系统通过模拟生成3000组混凝土配合比数据(包含水灰比、水泥用量和龄期三个关键特征),利用XGBoost强大的非线性建模能力预测混凝土抗压强度。研究背景源于传统混凝土性能测试方法耗时耗力的痛点,该系统可显著减少实验次数,优化配合比设计。系统实现包括:数据生成与特征工程(模拟真实工程数据并添加噪声和异常值)、XGBoost模型构建、以及预测性能评估。XGBoost算法因其处理非线性关系能力强、鲁棒性好等优势被选用,可为智能建造和数字化施工提供技术

huanghm88的专栏 131

力扣(LeetCode)450.删除二叉搜索树中的节点(Java)

因为最后一种情况涉及要大幅度变更二叉树的结构,所以思路稍微有些复杂。

zzb1580的博客 910

SiC MOSFET 失效机制详解

TDDB 指在相对较低电场(通常接近或略高于器件工作电压)下,长时间施加电压导致介电层(如栅氧化物)逐渐退化并最终击穿的现象。与即时击穿(Immediate Breakdown,由强电场直接引起)不同,TDDB 是时间相关的渐进过程,通常发生在数小时、几天甚至数年之后。核心过程:在 MOSFET 中,栅极与衬底之间施加电压时,电子通过量子隧道效应(Tunneling)注入介电层,形成缺陷或陷阱。这些缺陷积累,最终在介电层中形成导电路径(Conductive Path),导致短路和器件失效。统计特性。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 386

【ACP】2025-最新-疑难题解析- 练习二汇总

全球加速是优化公网访问的,负载均衡是分发流量的,公网 NAT 网关是处理公网 IP 的,高速通道是建私网连接但不直接提供固定私网地址功能。C 是客户端加密方式,D 是 ECS 云盘加密,都不属于 OSS 服务器端加密。某企业想使用云服务器 ECS + 负载均衡 SLB + 弹性伸缩 (Auto Scaling) 的架构搭建一个企业级门户网站,技术负责人对于负载均衡和弹性伸缩配合使用没有经验,于是将他理解的两种产品配合使用的一些技术细节列成了一个表单,并请作为架构师的您帮他做一下鉴别,以下哪些项是正确的?

jundao1997的专栏 297

LeetCode 450. 删除二叉搜索树中的节点 java题解

此时,我们找到该节点右子树中的最左节点(该节点是右子树中值最小的节点,且大于该节点左子树中所有节点的值),将删除节点的左子树连接到这个最左节点的左子树上(因为最左节点的值大于左子树所有节点的值,符合 BST 特性),然后用删除节点的右子节点来替代删除节点的位置。第五种情况:左右孩子节点都不为空,则将删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。第四种情况:删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点。

乾坤未定,你我皆是黑马 632

教师模型与学生模型:知识蒸馏的核心概念

知识蒸馏,教师模型,学生模型,模型压缩,迁移学习,深度学习 1. 背景介绍 深度学习模型在图像识别、自然语言处理等领域取得了显著的成就,但其巨大的模型规模和高昂的计算成本限制了其在资源有限的设备上的部署。知识蒸馏(Knowledge Distillation)作为一种模型压缩技术,旨

AI架构师小马 2772

LeetCode第450题:删除二叉搜索树中的节点的Java实现

LeetCode第450题要求从二叉搜索树(BST)中删除一个节点。本文将介绍两种Java实现方法:迭代法和递归法。LeetCode第450题是一个典型的二叉搜索树问题,通过理解BST的性质,可以有效地删除指定的节点。递归法和迭代法都是有效的解决方案。

2301_77695569的博客 702

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java实现 LeetCode 450 删除二叉搜索树中的节点

450. 删除二叉搜索树中的节点 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的...

Marcus 3383

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

力扣450 删除二叉搜索树中的节点 Java版本

给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。输入: root = [5,3,6,2,4,null,7], key = 0。输入:root = [5,3,6,2,4,null,7], key = 3。另一个正确答案是 [5,2,6,null,4,null,7]。输出:[5,4,6,2,null,null,7]输出: [5,3,6,2,4,null,7]

m0_47066863的博客 848

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

首先,在main函数中进行讨论,如果要删除的是根节点root,则直接调用insert函数,返回新的根节点;如果要删除的不是根节点,则通过深搜dfs函数进行遍历,若遇到子节点值为key,则调用insert,返回新的子节点。,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。此外,如果删除的是根节点,则需要将根节点的子节点作为新的根节点返回。因此,在删除对应节点后,要注意将该节点的左子树接到右子树的最左侧。如题目描述中所说,先找到节点,再删除节点。给定一个二叉搜索树的根节点。

想吃烤肉 550

leetcode450. 删除二叉搜索树中的节点(java)

给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。输入: root = [5,3,6,2,4,null,7], key = 0。输入:root = [5,3,6,2,4,null,7], key = 3。另一个正确答案是 [5,2,6,null,4,null,7]。输出:[5,4,6,2,null,null,7]输出: [5,3,6,2,4,null,7]

SP_1024的博客 978

【Java】Leetcode450 删除二叉搜索树中的节点

题目: 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 说明: 要求算法时间复杂度为 O(h),h 为树的高度。 示例: root = [5,3,6,2,4,null,7] key = 3 5 / 3 6 / \ 2 4 7 给定需要删除的节点值是 3,所以我们首先找到 3 这个节

qq_42482205的博客 127

java 递归从子节点删除父节点_LeetCode450. 删除二叉搜索树中的节点

删除一个二叉搜索树中的节点,需要进行情况的分类讨论,看一下将这个节点删除之后是否需要对二叉搜索树进行调整(为了保持树的连接和维持二叉搜索树的性质)。(1)如果删除的是一个叶子节点,那问题不大,因为它没有左子树和右子树,直接返回NULL就行了,表示它没了。(2)如果要删除的节点,左右子树都存在,那麻烦了,删除这个节点是需要进行调整的,删除的这个节点可以用它左子树的最大值或者右子树的最小值来替代(为了...

weixin_33334142的博客 630

力扣刷题450. 删除二叉搜索树中的节点 java语言版

原题链接:450. 删除二叉搜索树中的节点 最初的想法:删除一个节点,先是看这个节点存在与否,若存在则删掉。节点只指向左右节点而不指向父结点,那么要删除这个节点就得找到他的父结点,通过父结点找到他。所以父结点是否存在就可以分情况讨论了。 叶子节点删起来很简单,为此想到根据度的不同划分不同的删除模式。度为1,直接跨过它连下去就好,度为2比较麻烦,不好删除,所以转换思路,将他的后续或者前驱结点的值赋值过去,再把前驱或者后继节点删掉,间接删除了度为2的节点。 深入思考:度为2的节点的前驱后续结点怎么删除呢?他们如

qq_42474833的博客 220

java leetcode之[数据结构 中等]450. 删除二叉搜索树中的节点

题目的链接在这里:https://leetcode-cn.com/problems/delete-node-in-a-bst/ 目录题目大意一、示意图二、解题思路递归 题目大意 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 说明: 要求算法时间复杂度为 O(h),h 为树的高度。 一、示意图

wzw的博客 163

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

题目描述 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 样例描述 思路 BST的删除 + 分类讨论 三种情况如下: 对于第三种情况有两种方案: ①找到左子树的最右节点,让原来指向这个左子树最右节点的指针指向其左子树,然后用这个左子树最右节点替换掉目标节点 ②方案二:找到右子树的最左节点,让原来指

Sherlock的博客 228
上一篇: LeetCode701. 二叉搜索树中的插入操作(java)
下一篇: LeetCode349. 两个数组的交集(java)
inferno devil
博客等级 码龄9年 54粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值