红黑树的删除操作

  1. 无子节点时,删除节点可能为红色或者黑色;
    1.1 如果为红色,直接删除即可,不会影响黑色节点的数量;

1.2 如果为黑色,则需要进行删除平衡的操作了;

  1. 只有一个子节点时,删除节点只能是黑色,其子节点为红色,否则无法满足红黑树的性质了。 此时用删除节点的子节点接到父节点,且将子节点颜色涂黑,保证黑色数量。

  2. 有两个子节点时,与二叉搜索树一样,使用后继节点作为替换的删除节点,情形转至为1或2处理。
    例如可以:直接将D1的值赋值给D就行,然后讨论的是如何删除D1

    总体看来红黑树删除操作最难情况是删除黑色的叶子

删除黑色的叶子节点。因为一旦该节点被拿掉,红黑树中通过该节点的路径黑色节点数量将会减1,而且无法像情形2那样将子节点涂黑来达到平衡。此时只能自底向上进行平衡操作

要递归上去处理。

不用递归上去。

兄弟节点为红色(S=红)

情形(1) S为左子时,以P进行右旋;
情形(2) S为右子时,以P进行左旋;
旋转后交换P和S的颜色(S涂黑,P涂红),N兄弟节点变为黑色,进入情形2-兄弟节点为黑色进行处理。

删除总结与实例

删除动作(移除节点)之后,看看这个节点是不是黑色的叶子节点,如果不是,简单处理就可以达到平衡了;
先看N是不是根节点,是的话啥都不用管;不是的话看兄弟什么颜色:
2.1 兄弟是红色:进行旋转涂色,去到兄弟为黑色那里处理
2.2 兄弟是黑色,看看兄弟子节点是不是全部都是黑。
(1)全黑的话,看父什么颜色进行对应处理;
(2)不全黑,看兄在的位置,兄在左的话,看兄的左子是不是红色,进行对应处理;兄在右的话,看兄的右子是不是红色,进行对应处理。

红黑树的删除操作详解相关推荐

  1. 红黑树的删除_Python实现红黑树的删除操作

    上一篇文章使用Python实现了红黑树的插入操作.参考:Python实现红黑树的插入操作本篇文章使用Python实现红黑树的删除操作.先将红黑树的5条特性列出来:1. 节点是红色或黑色.2. 根节点是 ...

  2. Python实现红黑树的删除操作

    Python实现红黑树的删除操作 本专栏的上一篇文章使用Python实现了红黑树的插入操作.参考:https://blog.csdn.net/weixin_43790276/article/detai ...

  3. 红黑树:节点插入详解及其红黑树自我实现

    红黑树:节点插入详解及其红黑树自我实现 红黑树的四个性质: 每个结点不是红色就是黑色 根节点是黑色的 如果一个节点是红色的,则它的两个孩子结点是黑色的 对于每个结点,从该结点到其所有后代叶结点的简单路 ...

  4. 红黑树(Red Black Tree)详解

    红黑树 红黑树(Red Black Tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组. 红黑树是在1972年由Rudolf Bayer发明的,当时被称为 ...

  5. 红黑树结构完整实现与详解

    红黑树结构以平衡.高效的随机访问著称.实际使用过程中,其效率超出想象(节点数量越多,效率越高),大部分情况下查找的节点数量小于节点总量的二分之一,最长的查询路径也才是总量的二分之一加一个节点的距离. ...

  6. mongodb添加创建修改时间_MongoDB数据库插入、更新和删除操作详解

    一.Insert操作 Insert操作是MongoDB插入数据的基本方法,对目标集合使用Insert操作,会将该文档添加到MongoDB并自动生成相应的ID键.文档结构采用类似JSON的BSON格式. ...

  7. mysql删除操作详解

    drop table drop 是直接删除表信息,速度最快,但是无法找回数据 例如删除 user 表: drop table user; truncate (table) truncate 是删除表数 ...

  8. 56_Django数据库_ORM外键删除操作详解

    1. 级联操作 继续用上一节的项目案例,在article下的views.py文件中更新代码: from django.shortcuts import render from .models impo ...

  9. Java高级开发面试,红黑树详细分析(图文详解)

    开头 如果Redis的读写请求量很大,那么单个实例很有可能承担不了这么大的请求量,如何提高Redis的性能呢?你也许已经想到了,可以部署多个副本节点,业务采用读写分离的方式,把读请求分担到多个副本节点 ...

最新文章

  1. 国外同行关注啥——digg.com网站Programming分类每周热点[12/17 - 12/23]
  2. pvrect r语言 聚类_R语言一条命令实现基于样本和距离的聚类分析
  3. 分布式发布订阅消息系统Kafka单实例测试
  4. 用户故事地图对应到Epic及其缺点
  5. iReport中序号自增的实现
  6. springboot 设置ico_Spring Boot--Thymeleaf模板引擎/静态页面
  7. js自动篡改页面url地址 - 场景篇
  8. 实战解读丨Linux下实现高并发socket最大连接数的配置方法
  9. jupyter ipython display_ipython jupyter notebook中显示图像和数学公式实例
  10. Mac和Windows中常见中文字体的英文名称
  11. 怎么在本地运行java项目,eclipse怎么运行java web项目?
  12. java switch的意思_java switch
  13. ftp服务器上传创建文件夹权限设置密码,ftp服务器如何创建文件夹权限设置
  14. 2023年提高Google关键词排名的方法,如何提高谷歌排名?
  15. 详解冬奥冠军背后的AI黑科技
  16. OpenFlow简单介绍
  17. 无线Mesh网络 介绍
  18. 破壳问答 | 第一期
  19. 3G上网卡1--工具及使用学习笔记
  20. UGA由哪几部分组成和PGA上内存空间的分配与回收的方式

热门文章

  1. 微雪树莓派PICO笔记——5. UART (异步收发传输器)
  2. Adobe after effects cs5中文版
  3. Linux系统中管理用户登录及登录信息的处理
  4. win10搜索框的热门搜索怎么关闭?
  5. 错误:找不到或无法加载主类com.yyy.test.Main
  6. Spring Boot 1.X和2.X优雅重启实战
  7. 运维工程师:如何利用AR技术减少舟车劳顿提升运维效率?
  8. 在Matlab中配置libsvm
  9. Android Studio App开发中高级控件下拉列表Spinner的讲解及实战(附源码 超详细必看)
  10. 社工考试用计算机干什么,考了社会工作者证可以用来干嘛 - 希赛网