当前位置: 首页 > news >正文

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

问题描述:给定一个二叉搜索树的根节点root和一个值key,删除而叉搜索树中的key对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树的性质不变,也是一颗二叉搜索树。递归求解思路:由于二叉搜索树的性质,根节点大于左子树所有节点,小于右子树所有节点,若找到某个节点之后需要找到左子树和右子树两个子树值在最中间那个节点即可,有两种处理方式:第一种是找到左子树的最大节点,第二种是找到右子树的最小节点,都是可行的。此时还有特殊的情况,若没有左子树和右子树,则去除叶子节点之后直接返回null即可,若只有左子树,则左子树的根节点一定是中间那个元素,直接返回左子树即可,若只有右子树,则右子树的根节点一定满足是中间那个元素,直接返回右子树即可,若左子树和右子树均不为null,则找到中间那个值之后(这里找左子树),将其接替替换的那个节点值,并对左子树实行与上述一样的过程,对左子树进行递归求解。
 

public int findTheMaxOfLeftTree(TreeNode root)
{
if(root.right==null){return root.val;}
else{return findTheMaxOfLeftTree(root.right);}
}public Boolean findTheMaxOfLeftTree(TreeNode root,int key)
{
if(root==null){return false;}
if(root.val==key)
{
if(root.left==null&&root.right==null){root==null;return true;}
if(root.left!=null&&root.right==null){root=root.left;return true;}
if(root.left==null&&root.right!=null){root=root.right;return true;}
int maxLeftValue=findTheMaxOfLeftTree(root.left);
root.val=maxLeftValue;
findTheMaxOfLeftTree(root.left,maxLeftValue);}else
{
Boolean left=deleteNode(roo.left,key);
if(!left)
{
return deleteNode(root.right.key;key);
}}}
Public TreeNode FindTheMaxOfLeftTree(TreeNode root,int value)
{
findTheMaxOfLeftTree(root,value);
return root;
}

相关文章:

  • 怎么提升搜狗网站排名
  • ora-12154无法解析指定的连接标识符
  • OCR识别网络CRNN理解与Pytorch实现
  • 堆优化的dijkstra板子
  • 让页面里的字体变清晰,变细用CSS怎么做?
  • 蓝桥杯省赛无忧 第二章 基础算法 课件33 构造
  • 项目实战————苍穹外卖(DAY11)
  • Mysql运维篇(三) MySQL数据库分库分表方案
  • 测试驱动开发:基于Jenkins+GoTest+HTML的持续化集成
  • vue3-模版引用
  • docker 部署 sentinel
  • stm32 FOC 电机介绍
  • 九、Qt C++ 数据库开发
  • 大语言模型无代码构建知识图谱(2)--环境准备
  • Linux|centos7操作系统|无线WiFi的命令行配置---wpa_supplicant详解
  • angular学习第一篇-----环境搭建
  • CAP 一致性协议及应用解析
  • JS数组方法汇总
  • miaov-React 最佳入门
  • storm drpc实例
  • SwizzleMethod 黑魔法
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 关于springcloud Gateway中的限流
  • 记一次删除Git记录中的大文件的过程
  • 离散点最小(凸)包围边界查找
  • 聊聊directory traversal attack
  • 前言-如何学习区块链
  • 数组大概知多少
  • 延迟脚本的方式
  • 如何正确理解,内页权重高于首页?
  • ​插件化DPI在商用WIFI中的价值
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (4)logging(日志模块)
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (排序详解之 堆排序)
  • (全注解开发)学习Spring-MVC的第三天
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)mysql使用Navicat 导出和导入数据库
  • (轉)JSON.stringify 语法实例讲解
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET Core 项目指定SDK版本
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .Net6 Api Swagger配置
  • .net操作Excel出错解决
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • [.net]官方水晶报表的使用以演示下载
  • []error LNK2001: unresolved external symbol _m
  • [Ariticle] 厚黑之道 一 小狐狸听故事
  • [Avalon] Avalon中的Conditional Formatting.
  • [BZOJ]4817: [Sdoi2017]树点涂色
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • [CUDA 学习笔记] CUDA kernel 的 grid_size 和 block_size 选择
  • [DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案
  • [IE编程] 打开/关闭IE8的光标浏览模式(Caret Browsing)