LeetCode - Medium - 450

交通仿真软件:SUMO_(1).SUMO基础知识 SUMO 中的交通网络由节点(junctions)和边(edges)组成。节点表示交叉口或路网的连接点,边表示连接节点之间的道路。节点:节点文件(.nod.xml)定义了网络中的所有节点。每个节点有一个唯一的 ID 和坐标。</边:边文件(.edg.xml)定义了连接节点的边。每个边有一个唯一的 ID、起点节点 ID 和终点节点 ID。</车辆文件(.vtype.xml)定义了不同类型的车辆。每个车辆类型可以有不同的参数,例如长度、最大速度、加速度等。</ 阅读详情

Example 1:

Input: root = [5,3,6,2,4,null 《大厂前端面试题解析+Web核心总结学习笔记+企业项目实战源码+最新高清讲解视频》无偿开源 徽信搜索公众号【编程进阶路】 ,7], key = 3

Output: [5,4,6,2,null,null,7]

Explanation: Given key to delete is 3. So we find the node with value 3 and delete it.

One valid answer is [5,4,6,2,null,null,7], shown in the above BST.

Please notice that another valid answer is [5,2,6,null,4,null,7] and it’s also accepted.

Example 2:

Input: root = [5,3,6,2,4,null,7], key = 0

Output: [5,3,6,2,4,null,7]

Explanation: The tree does not contain a node with value = 0.

Example 3:

Input: root = [], key = 0

Output: []

Constraints:

  • The number of nodes in the tree is in the range [ 0 , 1 0 4 ] [0, 10^4] [0,104].

  • − 1 0 5 < = N o d e . v a l < = 1 0 5 -10^5 <= Node.val <= 10^5 −105<=Node.val<=105

  • Each node has a unique value.

  • root is a valid binary search tree.

  • − 1 0 5 < = k e y < = 1 0 5 -10^5 <= key <= 10^5 −105<=key<=105

[](()Analysis


方法一:我写的。

  1. 找出目标节点,找到即返回它和它的父节点,找不到直接结束算法。

  2. 如果目标节点是根节点,就给它弄个临时父节点,原根节点成为它的左子树。

  3. 根据目标节点的左右子树的有无指定删除方案:

  • 目标节点是叶子节点,或只有一个左子树,或只有一个右子树,则采用类似单链表删除节点方法(这就需要用到目标节点的父节点)。

  • 目标节点都有左右子树,则从右子树中查找出最小值节点,让它值替换目标节点值,随后在右子树移除最小值节点。由于BST的性质,最小值节点有么是叶子节点,有么只有右子树,只有这两种情况,则放心采用类似单链表删除节点方法移除最小值节点。

  1. 最后,返回根节点。如果目标节点是根节点,则返回临时父节点的左子树。

方法二:别人写的,递归版,精简优雅。

  1. Recursively find the node that has the same value as the key, while setting the left/right nodes equal to the returned subtree.
  1. Once the node is found, have to handle the below 4 cases:
*   node doesn’t have left or right - return null
*   node only has left subtree- return the left subtree
*   node only has right subtree- return the right subtree
*   node has both left and right - find the minimum value in the right subtree, set that value to the currently found node, then  
    recursively delete the minimum value in the right subtree  
    [link](()

[](()Submission


import com.lun.util.BinaryTree.TreeNode;

public class DeleteNodeInABST {

//方法一:我写的

public TreeNode deleteNode(TreeNode root, int key) {

TreeNode[] result = find(root, key);

if(result != null) {

TreeNode parent = result[0], target = result[1];

TreeNode fakeRoot = null;

if(parent == null) {//删除根节点,弄个假根节点,原

fakeRoot = new TreeNode(Integer.MAX_VALUE, root, null);

}

if(target.left != null && target.right != null) {//既有左子树,有右子树

TreeNode replaceOne = findReplaceOneFromRight(target, target.right);

target.val = replaceOne.val;

}else {

removeEasyOne(parent == null ? fakeRoot: parent, target);

}

if(parent == null) {//删除根节点的情况

root = fakeRoot.left;

fakeRoot.left = null;

}

}

return root;

}

private TreeNode[] find(TreeNode root, int key) {

TreeNode last = null, curr = root;

while(curr != null) {

if(key < curr.val) {

last = curr;

curr = curr.left;

}else if(curr.val < key){

last = curr;

curr = curr.right;

}else {

return new TreeNode[] {last, curr};

}

}

return null;

}

/**

  • target是叶子节点,target只有左子树,target只有右子数,这三种情况可以用链表式方法的删除节点

*/

private void removeEasyOne(TreeNode parent, TreeNode target) {

if(target.left == null && target.right == null) {//target是叶子节点

if(parent.left == target){

parent.left = null;

}else {

parent.right = null;

}

}else if(target.left != null && target.right == null){//target只有左子树

if(parent.left == target){

parent.left = target.left;

target.left = null;

}else {

parent.right = target.left;

target.left = null;

}

}else if(target.left == null && target.right != null){//target只有右子数

if(parent.left == target){

parent.left = target.right;

target.right = null;

}else {

parent.right = target.right;

target.right = null;

}

}

}

//查找右子树的最小值

private TreeNode findReplaceOneFromRight(TreeNode last, TreeNode child) {

if(child == null) return null;

while(child.left != null) {//

last = child;

child = child.left;

}

removeEasyOne(last, child);

return child;

}

IEC 61400-1:2019 中的 Vref ——从分类基准到极端风模型的应用 阅读详情

相关推荐

那些年-SAP固定资产导入AS91 OASV

固定资产起初导入步骤: 第一部分:资产数据导入 1)两个日期配置 填写图片摘要(选填) Specify transfer date/last closed fiscal year 这里的日期填写系统切换日期,如果系统是2015-10-01上线,这里填写2015-09-3 填写图片摘要(选填) Specifylast period posted in prv system 这里指定系统切换的上一期间。这里写2015-09 填写图片摘要(选填) ​2)AS91新增 填写固定资产的分类,公司

阿土工作室 7949

leetcode之Validate Binary Search Tree解决思路

题目如下: Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as follows: The left subtree of a node contains only nodes with keys less than the node's

笨鸟的专栏 966

CRPR的三种关键影响:从SI、OCV到Min Pulse Width的时序优化实践

本文深入探讨了CRPR(时钟重汇聚悲观度消除)在芯片时序优化中的三种关键影响:信号完整性(SI)、片上变异(OCV)和最小脉宽检查。通过实际案例分析和技术细节,展示了CRPR如何有效修正时序分析中的过度保守估计,提升设计精度。文章特别强调了SI-aware CRPR的调试技巧和OCV补偿的最佳实践,为芯片设计工程师提供了宝贵的时序优化指导。

weixin_30920853的博客 379

Leetcode0910. 最小差值 II(medium)

Leetcode0910. 最小差值 II(medium),Python题解

chenxy_bwave的专栏 1610

Win11下WSL2安装Ubuntu22.04避坑指南:从镜像源到C++环境配置

本文提供了一份详细的Win11下WSL2安装Ubuntu22.04的实战避坑指南。内容涵盖从WSL2核心安装、自定义安装路径,到更换国内镜像源以解决更新缓慢问题,并一站式配置完整的C++开发环境(包括GCC、CMake、vcpkg等),最后分享提升开发体验的进阶技巧,助你在Windows上打造高效的Linux开发工作站。

weixin_29260291的博客 562

蛋白质组学实战指南 | (八)从数据到洞见:差异蛋白筛选与功能解析全流程

本文系统阐述了蛋白质组学数据分析中,从原始数据质控到差异蛋白筛选与功能解析的全流程。重点介绍了数据质量评估、差异蛋白筛选的统计方法(包括多重检验校正)、功能注释与富集分析,以及蛋白互作网络构建与关键节点识别。最后,为如何将生物信息学洞见转化为实验验证提供了清晰的规划思路,助力研究者完成从数据到生物学知识的闭环。

weixin_29250573的博客 372

Leetcode 面试题 17.11. 单词距离(medium)

Leetcode 面试题 17.11. 单词距离(medium),Python题解

chenxy_bwave的专栏 955

Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知

Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知 文章目录Gitlab通过Webhook自动触发Jenkins构建任务并在更新完毕后发送钉钉消息通知1.实现思路2.新增钉钉机器人并测试消息的发送2.1.新增钉钉机器人2.2.测试发送消息到钉钉3.在Jenkins中新建一个构建任务3.1.新建任务3.2.配置任务时增加参数化构建过程3.3.配置任务添加git地址3.4.配置构建触发器生成gitlab webhook使用的token3.5.配置任务构建过程中执行的She

江晓龙的博客 3811

LeetCode刷题(十)----数组-----medium部分(Java、C++)

LeetCode刷题(十)-----数组-------medium部分(Java、C++) 238. 除自身以外数组的乘积 给定长度为n的整数数组nums,其中n>1,返回输出数组output,其中output[i]等于nums中除nums[i]之外其余各元素的乘积。 示例: 输入: [1,2,3,4] 输出: [24,12,8,6] 说明:请不要使用除法,且在O(n)时间复杂度内完成此题...

chenbo的博客 929

Leads、SDR、MQL、SQL、L2C术语概念,线索创建与清洗、线索分级模型、线索流转策略、线索的统计与分析

CRM中的“Leads”是什么?笔者在文中不仅较为全面地介绍了相关术语概念,还分析了线索的创建与清洗、线索的分级模型、线索流转策略以及线索的统计与分析。

盼盼学士 5960

通用抓取算法AnyGrasp(Graspnet)——本地部署并测试自定义输入数据

背景:GraspNet在数据采集方面,首先将相机固定到机械臂末端,对同一个场景拍摄256个不同的角度,同时场景中的每个物体都会提前采集好3D模型,之后将其投射到仿真环境中,在仿真环境中,对抓取位姿进行打标签,如此完成数据的采集。在运行官方的测试示例时,使用的是路径下的输入数据,可以分析下。color.png(输入):rgb图像(输出):输出的生成抓取位姿的图像depth.png(输入):和当前rgb图像对应的深度图像(保存格式是单通道uint16)meta.mat。

boss-dog 1330

LeetCode刷题之路(四)——medium的进阶

Problem 29:Divide Two Integers   不使用除法、乘法和求余运算,完成两个数的除法,当数值溢出时,返回MAX_INT。   解题思路:第一想法,直接用被除数循环减去除数,每次减得的结果大于0,则结果加1,小于0时循环结束。解法没问题,但是复杂度太高,当用一个很大的数去除一个很小的数时,会超时。   于是我们想到,我每次不是减去除数,而是依次减去除数的2的指数次幂倍...

起风之后,只剩沙丘 2577

Python 爬虫实战:豆瓣电影海报批量获取(Top250 榜单 + 可视化展示)

在信息爆炸的时代,数据已成为决策的核心,而数据的获取是数据分析的第一步。本文将详细介绍如何利用 Python 爬虫获取豆瓣电影 Top250 榜单的海报,并对数据进行可视化展示,助你更好地了解电影市场的趋势和用户的喜好。

yansideyucsdn的博客 719

Leetcode 450. Delete Node in a BST (Medium) (cpp)

Leetcode 450. Delete Node in a BST (Medium) (cpp)

还是需要多学习!闷声大发财,这是坠吼的! 610

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【leetcode】【medium】450. Delete Node in a BST​​​​​​​

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 ...

lemonade13的博客 208

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

LeetCode - Medium - 450,大厂面试经验

技术是没有终点的,也是学不完的,最重要的是活着、不秃。零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。

2401_84140776的博客 514

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

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

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

speargod的博客 224

LeetCode 450 Medium BST 节点删除 Python

    XiaoXiang Method     算法:?     思路:         先找到节点,然后再对要删除的节点进行处理         找到节点好说,用BST的性质找就好了         主要在于如何处理         这里的方法比较笨也比较麻烦,             1. 先确定当前root是prev的左孩子还是右孩子,后面重构prev要用         ...

h 716

leetcode雕虫小技medium 450. Delete Node in a BST

题干:https://leetcode.com/problems/delete-node-in-a-bst/ 这题基本上没什么难度,只要记住一个原则即可,删某节点,调整的原则是将该节点同左子树的最大节点交换,或者同右子树的最小节点交换,才能维持BST属性,并且,如果这个左子树的最大节点不是叶子节点,或者右子树的最小节点不是叶子节点,则这个操作还需要递归地做下去。 另外注意一个小t...

xunileida的专栏 214

LeetCode - Medium - 450. Delete Node in a BST

Topic Tree Description https://leetcode.com/problems/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 deletio

KISS 285

leetcode.450 删除搜索二叉树中的结点(Medium)

删除搜索二叉树中的结点迭代法:

Pinksatrfish的博客 238

[二叉搜索树]leetcode450:删除二叉搜索树中的节点(medium)

题目: 题解: 遍历二叉排序树,找到需要删除的节点,然后判断该删除节点的左子树是否为空。若不为空,则遍历左子树找到该左子树的最右边节点,也就是该左子树中的节点值最大点,然后我们将删除节点的右子树连接到该左子树的最右边节点上,最后我们用已连接上删除节点的右子树的左子树的根节点来覆盖需要删除的节点。若为空,那么我们直接用右子树的根节点来覆盖需要删除的节点。 代码如下: class Solution ...

algsup 397

LeetCode 98. 验证二叉搜索树(Medium)/ 958. 验证完全二叉树(Medium)/ 450.【仍为二叉搜索树】删除二叉搜索树中的节点(M)

题目链接 题解 验证二叉搜索树 思路 代码 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: ### 0204 递归(44 m.

newCraftsman的博客 199
上一篇: jwt相关问题及应用
下一篇: List集合之LinkedList(三)LinkedList总结
宇小哥
博客等级 码龄5年 4粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值