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

删除二叉搜索树中的节点

  • leetcode450. 删除二叉搜索树中的节点
    • 题目描述
  • 解题思路
  • 代码演示
  • 二叉树专题

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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/delete-node-in-a-bst

题目描述

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

示例1:
在这里插入图片描述
输入:root = [5,3,6,2,4,null,7], key = 3
输出:[5,4,6,2,null,null,7]
解释:给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。
一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。
另一个正确答案是 [5,2,6,null,4,null,7]。
在这里插入图片描述

示例 2:
输入: root = [5,3,6,2,4,null,7], key = 0
输出: [5,3,6,2,4,null,7]
解释: 二叉树不包含值为 0 的节点

示例 3:
输入: root = [], key = 0
输出: []

提示:
节点数的范围 [0, 104].
-105 <= Node.val <= 105
节点值唯一
root 是合法的二叉搜索树
-105 <= key <= 105

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

解题思路

本题总的来说分为两步,第一步是找到要删除的节点,
这个之前有一篇文章说过:二叉搜索树中的搜索
再就是找到后删除节点后,如何调整树的结构,使其还满足二叉搜索树的特性。

这里删除时,就要考虑三种情况了:
1.当前节点没有左右子节点,那就直接删除,
2.左右节点只有一个时,那就直接返回另外一个就行了。
3.第三种左右节点都有时。
我们要把右树上的最小节点替换过来,使其依然满足搜索二叉树的性质。

代码演示

/*** 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) {if(root == null){return null;}return process(root,key);}/*** 递归删除一个节点* @param root* @param val*/public static TreeNode process(TreeNode root,int val){if (root == null){return null;}if(root.val == val){//没有子节点,直接返回null 干掉当前节点if(root.left == null && root.right == null){return null;}// 左为null 时  返回右节点if (root.left == null){return root.right;}// 右为null 时  返回左节点if (root.right == null){return root.left;}//左右节点都有时//获取右子树上最小的节点TreeNode min = getMin(root.right);//删除右子树上最小的节点root.right =  process(root.right,min.val);//最小节点替换掉要删除的头节点min.left = root.left;min.right = root.right;root = min;//本题中也可以直接值替换// root.val = min.val;} else if (root.val > val) {root.left = process(root.left,val);} else if (root.val < val) {root.right = process(root.right,val);}return root;}/*** 获得最小节点,其实就是右树的最左节点*/public static TreeNode getMin(TreeNode root){while (root.left != null){root = root.left;}return root;}
}

二叉树专题

leetcode701. 二叉搜索树中的插入操作

leetcode700. 二叉搜索树中的搜索

leetcode98. 验证二叉搜索树

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

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

相关文章

深度学习实战(十一)——多标签分类(基于Keras)

目的&#xff1a; 训练一个分类器来将物品分到不同的类别中&#xff0c;比如一件衣服&#xff1a;可以安照服饰类别、颜色、质地打上“衬衫”、“蓝色”、“棉”的标签 服饰类别&#xff1a;衬衫、裙子、裤子、鞋类等 颜色&#xff1a;红、蓝、黑等 质地&#xff1a;棉、羊毛、…

Python中实现文本分类(附代码、数据集)

本文将详细介绍文本分类问题并用Python实现这个过程。 引言 文本分类是商业问题中常见的自然语言处理任务&#xff0c;目标是自动将文本文件分到一个或多个已定义好的类别中。文本分类的一些例子如下&#xff1a; 分析社交媒体中的大众情感鉴别垃圾邮件和非垃圾邮件自动标注客户…

CharTextCNN(AG数据集---新闻主题分类)

文章目录 CharTextCNN一、文件目录二、语料集下载地址&#xff08;本文选择AG&#xff09;三、数据处理(data_loader.py)四、模型&#xff08;chartextcnn.py&#xff09;五、训练和测试实验结果 CharTextCNN 一、文件目录 二、语料集下载地址&#xff08;本文选择AG&#xff0…

[NOI2009] 描边

题目描述 小 Z 是一位杰出的数学家。聪明的他特别喜欢研究一些数学小问题。 有一天&#xff0c;他在一张纸上选择了 n 个点&#xff0c;并用铅笔将它们两两连接起来&#xff0c;构成 (&#xfffd;−1)22n(n−1)​ 条线段。由于铅笔很细&#xff0c;可以认为这些线段的宽度为…

【英文文本分类实战】之二——数据集挑选与划分

请参考本系列目录&#xff1a;【英文文本分类实战】之一——实战项目总览 下载本实战项目资源&#xff1a;神经网络实现英文文本分类.zip&#xff08;pytorch&#xff09; [1] 数据集平台 在阅读了大量的论文之后&#xff0c;由于每一篇论文都会提出一个模型&#xff0c;十分想…

使用Keras进行单模型多标签分类

原文&#xff1a;https://www.pyimagesearch.com/2018/05/07/multi-label-classification-with-keras/ 作者&#xff1a;Adrian Rosebrock 时间&#xff1a;2018年5月7日 源码&#xff1a;https://pan.baidu.com/s/1x7waggprAHQDjalkA-ctvg &#xff08;wa61&#xff09; 译者&…

图像分类实战:mobilenetv2从训练到TensorRT部署(pytorch)

文章目录 摘要mobilenetv2简介线性瓶颈倒残差 ONNXTensorRT项目结构训练数据增强Cutout和Mixup导入包设置全局参数图像预处理与增强读取数据设置模型定义训练和验证函数 测试模型转化及推理转onnxonnx推理转TensorRTTensorRT推理 摘要 本例提取了植物幼苗数据集中的部分数据做…

商品分类js html,json数据来制作商城的产品分类菜单

人们早就习惯了在互联网购物买东西,甚至有一部分朋友还是上瘾了。本篇PHP教程就来帮助您的电子商务项目实现最重要的产品类别的导航菜单系统。我已经使用PHP、MYSQL及JQuery实现了亚马逊样式的产品分类图像菜单,下面让我们来看一下如何使用json数据来制作商城的产品分类菜单。…

Amazon SPAPI PII权限申请问题汇总

亚马逊PII权限申请 官方文档地址&#xff1a;Selling Partner API 目录 亚马逊PII权限申请 Amazon PII开发者角色申请问题罗列&#xff1a; 接下来很多人都可能会遇到的拒绝原因&#xff1a; eg.1 eg.2 eg.3 eg.4 审计及远程 最后&#xff0c;坐等申请通过的case Amazon PII开发…

文本分类方案,飞浆PaddleNLP涵盖了所有

文章目录 1.前言2.核心技术2.1 文本分类方案全覆盖2.1.1 分类场景齐全2.1.2 多方案满足定制需求方案一&#xff1a;预训练模型微调方案二&#xff1a;提示学习方案三&#xff1a;语义索引 2.2 更懂中文的训练基座2.3 高效模型调优方案2.4 产业级全流程方案 3. 快速开始4. 常用中…

亚马逊中国站通过ASIN获取商品信息

目录 亚马逊中国站获取全部商品分类 亚马逊中国站获取商品列表 亚马逊中国站通过ASIN获取商品信息 亚马逊中国站获取商品库存信息 亚马逊国际站获取全部商品分类 亚马逊国际站获取商品列表 亚马逊国际站处理图形验证码 亚马逊国际站通过ASIN获取商品信息 亚马逊国际站获取商品…

亚马逊国际站获取商品列表

目录 亚马逊中国站获取全部商品分类 亚马逊中国站获取商品列表 亚马逊中国站通过ASIN获取商品信息 亚马逊中国站获取商品库存信息 亚马逊国际站获取全部商品分类 亚马逊国际站获取商品列表 亚马逊国际站处理图形验证码 亚马逊国际站通过ASIN获取商品信息 亚马逊国际站获取商品…

亚马逊国际站处理图形验证码

目录 亚马逊中国站获取全部商品分类 亚马逊中国站获取商品列表 亚马逊中国站通过ASIN获取商品信息 亚马逊中国站获取商品库存信息 亚马逊国际站获取全部商品分类 亚马逊国际站获取商品列表 亚马逊国际站处理图形验证码 亚马逊国际站通过ASIN获取商品信息 亚马逊国际站获取商品…

dvwa靶场通关(五)

第五关 File Upload&#xff08;文件上传漏洞&#xff09; File Upload&#xff0c;即文件上传漏洞&#xff0c;通常是由于对上传文件的类型、内容没有进行严格的过滤、检查&#xff0c;使得攻击者可以通过上传木马获取服务器的webshell权限 low low等级没有任何的防护 创建…

亚马逊国际站通过ASIN获取商品信息

目录 亚马逊中国站获取全部商品分类 亚马逊中国站获取商品列表 亚马逊中国站通过ASIN获取商品信息 亚马逊中国站获取商品库存信息 亚马逊国际站获取全部商品分类 亚马逊国际站获取商品列表 亚马逊国际站处理图形验证码 亚马逊国际站通过ASIN获取商品信息 亚马逊国际站获取商品…

亚马逊国际站获取全部商品分类

目录 亚马逊中国站获取全部商品分类 亚马逊中国站获取商品列表 亚马逊中国站通过ASIN获取商品信息 亚马逊中国站获取商品库存信息 亚马逊国际站获取全部商品分类 亚马逊国际站获取商品列表 亚马逊国际站处理图形验证码 亚马逊国际站通过ASIN获取商品信息 亚马逊国际站获取商品…

亚马逊中国站获取全部商品分类

目录 亚马逊中国站获取全部商品分类 亚马逊中国站获取商品列表 亚马逊中国站通过ASIN获取商品信息 亚马逊中国站获取商品库存信息 亚马逊国际站获取全部商品分类 亚马逊国际站获取商品列表 亚马逊国际站处理图形验证码 亚马逊国际站通过ASIN获取商品信息 亚马逊国际站获取商品…

推荐12个开放式免费收录网站的分类目录

很多做网站推广的网友都问2019网址分类目录还有用吗?一些长久网站或高权重、流量高的网站分类目录还有用的&#xff0c;不但能增加优质的外链&#xff0c;提高网站的权重&#xff0c;还能增加网站的曝光率。做seo网页优化的&#xff0c;很多都将会新站提交到各个分类目录网站&…

亚马逊分类目录_新版亚马逊分类目录v2.4程序源码官方分享下载

亚马逊分类目录程序是个跨平台的开源软件&#xff0c;具备来路、去路统计功能&#xff0c;支持两级分类&#xff0c;具有操作简单、功能强大、稳定性好、扩展性及安全性强、二次开发及后期维护方便&#xff0c;可以帮您迅速、轻松地构建起一个强大、专业的分类目录或网址导航网…

《大数据技术与应用》课程实验报告|week12|实验8|Pig——高级编程环境|验证评估函数

目录 一、实验内容 二、实验目的 三、实验设备 四、实验步骤 步骤一 步骤二 步骤三 步骤四 步骤五 步骤六 步骤七 步骤八 步骤九 步骤十 步骤十一 步骤十二 步骤十三 步骤十四 步骤十五 步骤十六 五、实验结果 六、实验小结 一、实验内容 验证19.5节中的…