leetcode 450. Delete Node in a BST(二叉搜索树删除节点)

450. Delete Node in a BST【LeetCode单题讲解系列】 450._Delete_Node_in_a_BST【LeetCode单题讲解系列】 立即下载

Given a root node reference of a BST and a key, delete the node with the given key in the BST. Return the root node reference (possibly updated) of the BST.

Basically, the deletion can be divided into two stages:

Search for a node to remove.
If the node is found, delete the node.

删除二叉搜索树中指定的节点。

思路:
二叉搜索树删除节点有几种情况。

(1) root是null时直接返回null

(2) root.val < key,那么key在右子树,那么只需要把root.right和key传入,递归处理删除二叉搜索树节点即可。

(3) root.val > key, 同样的,key在左子树,只需要把root.left和key传入,递归处理删除二叉搜索树节点即可。

(4) root.val == key
这时又分几种情况(就不画图了)
1 当前root是叶子节点,直接删除该点即可,即root=null,返回root
(可以并到2,3情况)

2 当前节点没有左子树,那么直接把它的右子树接到parent,再把该节点删除。即返回右子树的根节点,删除当前节点

3 当前节点没有右子树,那么直接把它的左子树接到parent,再把该节点删除。即返回左子树的根节点,删除当前节点

4 当前root节点既有左子树又有右子树,这时候要在右子树中找到最小的点node,node.val替换到root里,再把原node点删掉,而把原node删掉这步只需要传入右子树根节点和node.val,递归调用即可(代码中用这种方法)。
或者复杂一点,变动指针把node和root点替换后删除原node点。

总结一下就是以下几种情况
1 root是null,直接返回null即可
2 key和root.val不相等,那么递归调用在左子树或右子树中找key并删除
3 key和root.val相等,这时要看root有没有左右子树,如果有一个或都没有,直接删除节点。如果有左右子树,就找到右子树中最小值的节点替换到root,并删除替换到右子树中最小值处的节点。

    public TreeNode deleteNode(TreeNode root, int key) {
        if(root == null) return root;
        if(root.val < key){
            root.right = deleteNode(root.right, key);
        } else if(root.val > key) {
            root.left = deleteNode(root.left, key);
        } else {
            TreeNode newRoot = null;
            if(root.left == null) {
                newRoot = root.right;
                root = null;
                return newRoot;
            } else if(root.right == null) {
                newRoot = root.left;
                root = null;
                return newRoot;
            } else {
                newRoot = root.right;
                while(newRoot.left != null) {
                    newRoot = newRoot.left;
                }
                root.val = newRoot.val;
                root.right = deleteNode(root.right, newRoot.val);
            }
        }
        return root;
    }
如何成为一名高级数字 IC 设计工程师(6-7)数字 IC 验证篇:DEBUG 技巧 不懂验证的设计不是好的设计;UVM 验证思维是指导缜密的芯片设计的导师;推荐书籍《芯片验证漫游指南》。 阅读详情

相关推荐

暗黑破坏神2重制版 mod制作教程(一)

暗黑2重制版mod修改教程

hhhh2312的博客 7455

【Leetcode】450. Delete Node in a BST

法1:比较简单的解法是通过旋转。如果树根等于key,并且左右子树都空,则返回null,这个情况很简单;否则就把树根向下旋转,如果左子树非空则右旋,否则左旋(因为左子树为空的话是没法做右旋的)。事实上左旋还是右旋怎样都无所谓,最重要的是要把等于key的节点旋到叶子那里,然后就容易删了。法2:更简单的解法是通过合并。如果树根等于key,则直接返回左右子树合并的新树。在二叉搜索树中删除值为key的节点,返回删除后的树根。

数学、算法爱好者的博客 257

知识图谱_知识图谱 | 知识图谱做用户画像

导读:最近一直在思考怎么用知识图谱做推荐,但是目前能知道的内容都是基于路径的推荐和基于图特征的推荐,所以能不能换一个角度,探究一下用知识图谱怎么做用户画像,因为画像也是推荐系统重要的一部分。现在的知识图谱+推荐怎么做的传统的用户画像怎么做现在的知识图谱+推荐怎么做的?基于路径:可以理解成基于图谱的多路径召回,或者多路径推荐,然后根据路径的转移概率进行排序从而达到推荐的效果,基于路径比较适合简单的推...

weixin_28801659的博客 1460

Delete Node in a BST

Given a root node reference of a BST and a key, delete the node with the given key in the BST. Return the root node reference (possibly updated) of the BST. Basically, the deletion can be divided ...

leetcode 解题思路 1405

K230开发板实战:5步搞定YOLOv8模型部署(附常见报错解决方案)

本文提供了一份详细的K230开发板部署YOLOv8模型的实战教程。内容涵盖从环境准备、模型转换到代码编写的完整流程,并重点解析了使用AICube工具链时常见的“生成部署文件异常”等报错解决方案,旨在帮助开发者高效完成嵌入式AI模型部署。

weixin_29053073的博客 786

实战分享:如何利用svchost进程绕过360防护(附完整Shellcode注入教程)

本文深入解析系统进程安全防护机制,探讨svchost等关键进程的安全特性与防护策略。详细分析安全软件的行为检测和内存保护技术,提供系统加固与监控实践建议,助力企业构建多层次防御体系,有效应对潜在安全威胁。

weixin_30752699的博客 99

C++ delete a node from BST

首先, 从一个BST中删除一个节点可能很

a130737的专栏 1732

mac搭建ios自动化环境之WebDriverAgent配置

一、WebDriverAgent 1、简单介绍: WebDriverAgent是facebook为苹果公司开发的一款自动化测试工具,github上有下载资源;另外appium安装后也会自动安装自带的WebDriverAgent;可以用自带的,也可以从github下载并替换自带的; 2、不同appium版本自带WebDriverAgent默认路径不同 1)appium 1.10.1之前版本: npm方式安装: /usr/local/lib/node_modules/appium/node_modules/a

qq_30237715的博客 2762

LeetCode 450 Delete Node in a BST(删除BST节点)

Given a root node reference of a BST and a key, delete the node with the given key in the BST. Return the root node reference (possibly updated) of the BST. Basically, the deletion can be divided int

nudt_oys的博客 680

R语言Dunnett’s检验实战:寻找差异组之间的效果

总结起来,本文以R语言为工具,演示了如何使用Dunnett’s检验来找出单因素方差分析中不同组之间的效果差异。在本篇文章中,我们将通过R语言实战演示如何使用Dunnett’s检验来寻找不同组之间的效果差异。在分析结果时,通常我们会关注具有显著差异的组别,并基于Dunnett’s检验结果进行进一步的解释和讨论。首先,我们需要准备一组数据,假设我们有一个实验,涉及到四个不同的处理组和一个对照组。当我们发现方差分析结果显示存在显著差异时,我们可以进一步进行Dunnett’s检验来确定具体哪些组之间存在差异。

CoderExtra的博客 1104

ADS基础教程19 - 电磁仿真(EM)基本概念和实操

一、引言二、基本概念1.EM介绍2.Momentum介绍3.FEM介绍4.Substrate介绍三、创建Layout并进行Momentum仿真1.创建Layout2.添加Microtrip(微带线)3.添加Substrate4.Momentum仿真四、总结EM全称Electromagnetic,即electro(电)magnetic(磁)。ADS为设计和评估现代通信系统产品提供了电磁仿真工具(EM)。EM包括Momentumsimulator(动量仿真器)和FEM。

XZ_ZC的博客 1万+

LeetCode 450: 删除二叉搜索树中的节点 Delete Node in a BST

题目: 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可...

爱写Bug 527

【WorkBuddy从入门到精通实战教程】第 4 章 快速完成第一个 WorkBuddy 任务

摘要:WorkBuddy任务创建指南详细说明了从新建任务到结果验收的全流程。操作步骤包括:选择工作目录、设置模式(Craft/Ask/Plan)、指定AI模型、输入任务说明(需包含目标/输入/动作/约束/输出/验收6要素),可选配Skill等高级设置。文中提供三个入门示例:A)文件整理需保持原文件并生成分类方案;B)会议纪要要求结构化输出且所有内容有原文依据;C)Word转PPT需遵循品牌规范并控制页数。特别强调首次操作应在演练目录测试,处理真实数据前需确认授权范围,输出文件需检查涉密信息并按规范共享。(1

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 1365

LeetCode 450. Delete Node in a BST删除二叉搜索树的一个节点

一、题目 Given a root node reference of a BST and a key, delete the node with the given key in the BST. Return the root node reference (possibly updated) of the BST. Basically, the deletion can be divided...

可控的事情要谨慎,不可控的事情要乐观。 201

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

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

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

leetcode 450. Delete Node in a BST 删除二叉搜索树中的节点

本文提出了一种删除二叉搜索树(BST)中指定节点的算法。算法首先通过队列层序遍历找到目标节点,将其父节点对应的指针置空。然后利用BST的性质,将被删除节点的左右子树重新插入到BST中。对于根节点的情况进行了特殊处理。该方法的时间复杂度和空间复杂度均为O(n),其中n为树中节点数量。代码实现使用递归方式重建子树,通过队列进行广度优先搜索定位目标节点。该算法保持了BST的有序性,能够正确处理各种删除情况。

邹九的个人博客 353

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Leetcode 450.删除二叉搜索树中的节点(Delete Node in a BST)

Leetcode 450.删除二叉搜索树中的节点 1 题目描述(Leetcode题目链接)   给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 说明: 要求算法时间复杂度为 O(h),h ...

qq_39378221的博客 223

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

leetcode 450.删除二叉搜索树中的节点 (delete node in a bst)c语言

leetcode 450.删除二叉搜索树中的节点 (delete node in a bst)c语言1.description2.solution 1.description https://leetcode-cn.com/problems/delete-node-in-a-bst/description/ 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的...

hsk6543210的博客 314

[Swift]LeetCode450. 删除二叉搜索树中的节点 | Delete Node in a BST

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/streng...

weixin_30848775的博客 127

leetcode 450. Delete Node in a BST 删除二叉搜索树中的节点 (中等)

这道题让我们删除二叉搜索树中的一个节点,难点在于删除完节点并补上那个节点的位置后还应该是一棵二叉搜索树。被删除掉的节点位置,不一定是由其左右节点补上,

ln_ydc的专栏 235

Leetcode 450. 删除二叉搜索树中的节点 Delete Node in a BST - Python 递归法

当key不在BST中时,则遍历BST的某一分支都找不到,对吧?即返回到第一层,此时的root和一开始传入的待查找root是一模一样的BST。4.左孩子L和右孩子R都不为None,则找到右子树R的最底层的最左孩子UL。然后让L成为UL的左孩子。1.左右子孩子为None,直接删了完事儿,返回None,与第2.情况一致,可以共用代码;一、key不在二叉搜索树(BST)中,则依此确定递归停止条件,返回None;2.左孩子为None,则返回右孩子为根节点;3.右孩子为None,则返回左孩子为根节点;

rendalian的博客 493

leetcode 450. delete-node-in-a-bst 删除二叉搜索树中的节点 python3

时间:2020-9-23 题目地址:https://leetcode-cn.com/problems/delete-node-in-a-bst/ 题目难度:Medium 题目描述: 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的key对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 说明: 要求算法时间复杂度为O(h),h 为树的高度。 示...

isabloomingtree的博客 278

[LeetCode] 450. Delete Node in a BST 删除二叉搜索树中的节点

Given a root node reference of a BST and a key, delete the node with the given key in the BST. Return the root node reference (possibly updated) of the BST. Basically, the deletion can be divided int...

weixin_30635053的博客 160

[leetcode]450. Delete Node in a BST二叉搜索树删除节点

二叉树变量只是一个地址 public static void main(String[] args) { TreeNode t = new TreeNode(3); help(t); System.out.println(t.val); } public static void help(TreeNode t...

weixin_30662109的博客 123

Leetcode-450 Delete Node in a BST(删除二叉搜索树中的节点)

1 class Solution 2 { 3 public: 4 //if doesn't find,return NULL 5 TreeNode *BinarySearchTreeNodeFindMin(TreeNode *TreeRoot) 6 { 7 if(TreeRoot==NUL...

weixin_30340353的博客 123

leetcode [450. 删除二叉搜索树中的节点](https://leetcode-cn.com/problems/delete-node-in-a-bst/)

leetcode 450. 删除二叉搜索树中的节点 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 示例 1: 输入:root = [5,3,6,2,4,null,7], key = 3 输出:[5,4,6,2,null,null,7] 解释:给定需要删除的节点值是

yingmu__的博客 229

LeetCode 450. Delete Node in a BST

问题描述 Given a root node reference of a BST and a key, delete the node with the given key in the BST. Return the root node reference (possibly updated) of the BST. Basically, the deletion can be divid...

Keep Learning 213
上一篇: leetcode 698. Partition to K Equal Sum Subsets(分成K个相等和的子集)
下一篇: leetcode 530. Minimum Absolute Difference in BST(二叉搜索数中最小差的绝对值)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值