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

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

思路:根据目标值不断向左或向右递归,找到目标节点(或者最后没找到)之后对节点进行删除操作

有以下五种情况:(这些都算是终止条件里的操作)

  • 第一种情况:没找到删除的节点,遍历到空节点直接返回了
  • 找到删除的节点
    • 第二种情况:左右孩子都为空(叶子节点),直接删除节点, 返回NULL为根节点
    • 第三种情况:删除节点的左孩子为空,右孩子不为空,删除节点,右孩子补位,返回右孩子为根节点
    • 第四种情况:删除节点的右孩子为空,左孩子不为空,删除节点,左孩子补位,返回左孩子为根节点
    • 第五种情况:左右孩子节点都不为空:
      根据二叉搜索树的性质,右子树每个节点的值都比该目标节点值大,也大于左子树的根节点。
      右子树最左边的节点是右子树最小值,因此将左子树根节点放在右子树最左边节点的左孩子节点位置即可(左右子树逻辑一样,处理一种即可)
      将删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点。

还是跟上题一样,通过返回值接收来达到父节点与孩子节点(或者树)之间的绑定关系。

增加节点和删除节点的区别:

二叉搜索树添加节点只需要在叶子上添加就可以的,不涉及到结构的调整,而删除节点操作涉及到结构的调整

依然使用递归函数的返回值来完成把节点从二叉树中移除的操作。

这里最关键的逻辑就是第五种情况(删除一个左右孩子都不为空的节点)。

相关文章:

  • 【Vulkan 入门系列】创建交换链、图像视图和渲染通道(四)
  • 【2025面试常问Java八股】AQS介绍(AbstractQueuedSynchronizer 抽象队列同步器)
  • PyCharm使用Anaconda 中的虚拟环境
  • PowerBi如何制作KPI的总览页?
  • 关于AI:记忆、身份和锁死
  • Function calling LLMs 的 MCP:AI开发的双剑合璧
  • [OpenGL]使用OpenGL实现基于物理的渲染模型PBR(下)
  • 大数据应用开发——大数据平台集群部署(四)
  • 【KWDB 创作者计划】_上位机知识篇---Arduino
  • 什么是 C++中的const?
  • SpringBoot Actuator指标收集:Micrometer与Prometheus集成
  • Matlab 基于模型参考自适应法和SVPWM的异步电机控制
  • `ImadcnIdentifierGenerator` 深度解析
  • Java学习笔记(数组,方法)
  • JavaWeb 课堂笔记 —— 16 MyBatis 动态SQL
  • Img2img-turbo 在2080Ti上的测试笔记
  • 双目视觉中的动态畸变矫正与跨视角信息融合
  • 4月19日记(补)算了和周日一块写了 4月20日日记
  • 前端工程化之自动化部署
  • 探秘STM32如何成为现代科技的隐形引擎
  • 尹锡悦涉嫌发动内乱案第二次庭审举行
  • 根据学习教育安排,上海市委中心组专题学习总书记力戒形式主义官僚主义重要论述
  • 商务部:支持“来数加工”等新业态新模式,发展游戏出海业务
  • 广西气象干旱面积97.5%,影响人畜饮水、农业生产
  • 《“四有”好老师系列丛书》发布,由顾明远总主编
  • 美国海关新规致跨境包裹延误,DHL暂停超800美元对美个人货运