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

将点云坐标转换成世界坐标的demo 阅读详情

链接:https://leetcode.cn/problems/delete-node-in-a-bst/
二叉搜索树的增删改查都是必会的内容,但是删除相对于其他操作较难一点,可以通过这道题来进行练习。

题目描述

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

递归解法

class Solution:
    """
    递归解法
    """
    def deleteNode(self, root: Optional[TreeNode], key: int) -> Optional[TreeNode]:
        """
        删除根为root的BST中node.val等于key的节点,返回删除后的根节点(根节点可能变化)
        """
        if not root:
            return None
        if key < root.val:
            root.left = self.deleteNode(root.left, key)
        elif root.val < key:
            root.right = self.deleteNode(root.right, key)
        # # root可能有0或1个孩子节点,但是处理方式相同,返回孩子节点
        elif not root.left or not root.right:
            child = root.left if root.left else root.right
            return child
        else:
            successor = root.right  # 使用后继节点代替root
            while successor.left:
                successor = successor.left
            root.val = successor.val  # root.val赋值为后继节点值
            root.right = self.deleteNode(root.right, successor.val)
        return root

迭代解法

迭代解法基本思路与上相同,就是要多分类讨论删除的节点是不是根节点。

class Solution:
    """
    非递归解法
    """
    def deleteNode(self, root: Optional[TreeNode], key: int) -> Optional[TreeNode]:
        if not root:
            return root
        node, father = self.findNode(root, key)
        if not node:
            return root
        return self.delete(root, father, node)

    def delete(self, root, father, node):
        if node.left and node.right:
            suc_father, successor = self.findSuccessor(node)
            node.val = successor.val
            return self.delete(root, suc_father, successor)
        if not node.left and not node.right:
            if root == node:
                return None
            if father.left == node:
                father.left = None
            else:
                father.right = None
            return root
        child = node.left if node.left else node.right
        if root == node:
            return child
        if father.left == node:
            father.left = child
        else:
            father.right = child
        return root

    def findNode(self, root, key):
        if not root:
            return root
        if root.val == key:
            return root, None
        father = root
        while root:
            if root.val == key:
                return root, father
            elif key < root.val:
                father = root
                root = root.left
            else:
                father = root
                root = root.right
        return None, None

    def findSuccessor(self, root):
        successor = root.right
        father = root
        while successor.left:
            father = successor
            successor = successor.left
        return father, successor
从零手写神经网络:用NumPy实现全连接网络与反向传播 神经网络本质上是可微分的函数复合体,其核心在于仿射变换与非线性激活的交替堆叠,以及基于链式法则的自动微分实现。理解前向传播的矩阵运算逻辑和反向传播的梯度流动机制,是掌握深度学习底层原理的关键路径。权重初始化(如He/Xavier)、激活函数选择(ReLU/Sigmoid)与数值稳定性处理(如1e-8防下溢)共同决定了训练的收敛性与鲁棒性。这些基础要素不仅支撑学术推导,更直接影响工业场景中的模型调试、FPGA部署及梯度异常定位。本文以纯NumPy实现三层全连接网络为载体,聚焦‘From Scratch’过程中 阅读详情

相关推荐

AWSIM模拟器 新增多相机

本文介绍了基于Unity6引擎对AWSIM自动驾驶模拟器的优化方案,主要针对多相机系统的扩展实现。作者通过修改EgoVehicle.cs和AutowareSimulationDemo.cs核心代码,将原单相机系统升级为5相机配置。关键技术点包括:1)使用List容器管理多个CameraSensor组件;2)完善相机初始化流程;3)配置5个相机UI显示窗口;4)修改ROS话题设置。优化后的系统可支持BEVFusion等多传感器融合算法的测试验证,为Autoware.universe 0.45.0及以上版本提供

W805698955的博客 830

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

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

XBlog 285

从实验室到生活:构建一份全面的手机相机主观画质评测指南

本文详细介绍了如何从实验室数据转向实际体验,构建全面的手机相机主观画质评测指南。通过基础装备清单、室内外场景实战评测及数据之外的感知艺术,帮助用户发现手机相机在色彩还原、动态范围和夜景模式等方面的真实表现。特别关注主观体验与客观参数的差异,提供实用的评测技巧和报告撰写心法。

weixin_30940783的博客 307

★【删除二叉搜索数节点】【递归】Leetcode 450. 删除二叉搜索树中的节点

★【删除二叉搜索数节点】【递归】Leetcode 450. 删除二叉搜索树中的节点

prince0520的博客 622

【LDLTS解析】从重叠峰到精准参数:拉普拉斯深能级瞬态光谱如何重塑半导体缺陷分析

本文深入解析了拉普拉斯深能级瞬态光谱(LDLTS)技术如何革新半导体缺陷分析。针对传统DLTS难以分辨重叠峰的痛点,LDLTS通过拉普拉斯逆变换对高精度电容瞬态曲线进行数学解卷积,成功分离发射率相近的缺陷信号,实现从模糊宽峰到精准独立峰的转变。该技术不仅大幅提升了缺陷激活能和捕获截面等关键参数的提取精度,更推动分析范式从经验拟合转向第一性原理,为先进半导体工艺开发与良率提升提供了强大的精准诊断工具。

weixin_29224309的博客 272

FRM模型五:Brinson业绩归因

利用Brinson对基金组合业绩进行归因分析。

stonesssssss的博客 3001

算法训练 LeetCode:450.删除二叉搜索树中的节点

删除节点,首先我们要找到节点,然后才删除,删除以后它的左右节点如果有的话,要连在新的节点上,如果它没有左右节点, 那说明它就是叶子节点,直接删除就行。删除的方法就是它的父节点指向空,那就是把这个节点删除了。本文具体分析这个题的思路。

Amy_au的博客 1149

Ultralytics 框架中 model.predict() 返回的 results 对象的详细解析

通过掌握 results 对象的使用方法,您可以快速实现模型部署、数据分析与可视化。

浩瀚之水的专栏 746

leetcode450-删除二叉搜索树中的节点

leetcode450-删除二叉搜索树中的节点

weixin_45799371的博客 759

【硬件】LT3763中文手册

1)精确控制输入和输出电流;2) 3000:1真彩色PWM™调光;3) ±1.5%电压调节精度;4) ±6%电流调节精度;5)6V至60 V输入电压范围;6)宽输出范围最高可达55V;7)<2µA关断电流;8)用于负载电流热控制的控制引脚;9)输入和输出电流监控和限制;10)开路、短路和C/10故障检测;11)适用于LED应用的PWM驱动器输出;12)热增强型28引脚FE封装。

qq_39200110的博客 489

4、高级认证解决方案:Active Directory、LDAP、RADIUS和TACACS+深度解析

本文深入解析了多种高级认证解决方案,包括Active Directory、标准LDAP、RADIUS和TACACS+,涵盖其技术优势、配置步骤及适用场景。同时介绍了如何实现通用用户管理,包括使用第三方认证解决方案和ADSI自助用户管理。通过实际案例部署,展示了如何高效、安全地管理大规模用户认证与权限控制,为企业安全架构提供参考。

o4p5q6r7s的博客 302

golang力扣leetcode 450.删除二叉搜索树中的节点

450.删除二叉搜索树中的节点450.删除二叉搜索树中的节点题解代码 450.删除二叉搜索树中的节点 450.删除二叉搜索树中的节点 题解 如果key < root.Val,说明要删除的节点在BST的左子树,那么递归的去左子树删除即可 2 如果key > root.Val,说明要删除的节点在BST的右子树,那么递归的去右子树删除即可 3 如果key = root.Val,说明要删除的节点就是本节点,这一类又分以下三种情况: 要删除的节点是叶子节点,那很简单,直接将当前节点删除,置为nil即可;

清风 595

基于Multisim/TINA的H桥电机驱动电路设计与仿真分析

摘要 本文基于Multisim/TINA仿真平台,对H桥电机驱动电路进行了系统设计与分析。研究重点包括H桥拓扑结构的工作原理、PWM调速控制方法以及两种驱动方案对比分析。通过光耦隔离驱动与IR2110专用驱动IC的仿真对比,验证了IR2110自举电路在高低侧驱动中的优势。仿真实验着重分析了死区时间对防止直通现象的关键作用,并建立了直流电机的R-L-E等效模型进行动态特性仿真。结果表明,采用IR2110驱动方案配合适当的栅极电阻和自举电容参数,能够实现电机的高效双向调速控制。本研究为实际电机驱动系统的设计提供

huanghm88的专栏 137

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

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

会流泪de鱼的博客 152

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

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

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

peony的博客 229

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

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

在所有二叉搜索树(BST)的操作里,删除节点算是最容易让人写崩的一道题。 插入很好写,查找也没什么难度,但一到删除,就会遇到各种情况: 要删的节点是叶子节点怎么办 只有一个子节点怎么办 左右子树都存在又该怎么办 而这道 LeetCode 450,几乎把 BST 删除能遇到的所有坑都覆盖到了。

记录从移动端、鸿蒙到物联网与AI的完整实战与思考。专注于分享可复用的工程方案与产品思维,尤其深入鸿蒙生态与全栈开发。以十年工程与管理沉淀,为你提供清晰的技术纵深路径。坚信技术的价值在于“贯通”与“落地”。 866

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

LeetCode 删除二叉搜索树中的节点(450题)递归与非递归

LeetCode 删除二叉搜索树中的节点 @author:Jingdai @date:2020.12.06 题目描述(450题) 给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 题目分析 对于一个二叉搜索树,要删除树中一个节点,分3种情况。 情况1:如果要删除的节点是叶子节点,比如图中节点12,可以直接删除。 情况2:如果要删除的节点只有一个子树,比如图中节点5,可以将该节点的子

qq_41512783的博客 430

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

给定一个二叉搜索树的根节点 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]

pige666的博客 320

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

给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 1. 首先找到需要删除的节点; 2. 如果找到了,删除它。

2301_80211119的博客 1259

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

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

s_Shune 229

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

leetcode450:删除二叉搜索树中的节点题目描述解法我最初的思路官方题解 第二周的刷题博客开始了,这是第一篇。 首先总结一下,发现前面写的几篇还是不够思路清晰,总结不够,但是凡事总有个过程,慢慢来,慢慢进步。就像每天学半小时英语口语听力一样,现在已经比刚开始的时候进步很多了,很多句子听一次都大概能懂了,除非有一些生词,这也是坚持了近60天的成果。写博客的目的有两点,一是梳理思路,比较各种方法...

xxx_gt的博客 303

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

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

zzb1580的博客 909

LeetCode 450. 删除二叉搜索树中的节点 | C++语言版

给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。

weixin_45992021的博客 520

【力扣】LeetCode450.删除二叉搜索树中的节点

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

金金金金金的博客 183

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

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

xiaoshiguang3的博客 281

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

LeetCode 450利用BST左小右大的性质: 1.root 为空,代表未搜索到值为 key 的节点,返回空 2.key>root.val,即key 节点可能在root 的右子树中,需要递归地在 root.right调用deleteNode,此时接住递归的结果,即被删除节点的替代节点min 3.key>root.val,同理 4.如果key==root.val 即找到了key,开始删除1.root 为叶子节点,没有子树。则返回null传给root的父节点,即用null代替root 2.root 只有左子

机械工程跑路哥 170
上一篇: LeetCode刷题目录
下一篇: Leetcode 78. 子集 and 90. 子集 II
von Libniz
博客等级 码龄8年 421粉丝 173原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值