红黑树

定义

  1. 节点是红色或黑色
  2. 根结点一定是黑色
  3. 所有叶子节点都是黑色(指的是null)
  4. 每个红色节点的两个子节点都是黑色(从每个叶子到根的所有路径上不能有两个连续的红色节点)
  5. 从任意节点到其每个叶子节点的所有路径都包含相同数目的黑色节点

时间复杂度

[O(lgn)]

性质

从根到叶子的最长的可能路径不多于最短的可能路径的两倍长(2k - 1)

插入

注:插入的节点颜色一开始都默认是红色

注:选择插入的位置和二叉搜索树的插入是一样的(删除也和二叉搜索树一样)

被插入的节点是根节点

  • 直接把此节点变为黑色

被插入的节点的父节点是黑色

  • 什么也不需要做

被插入的父节点是红节点

当前节点的祖父节点的另一个子节点(叔叔节点–父节点的父节点的另一个子节点)也是红色

  1. 将父节点变为黑色
  2. 将叔叔节点变为黑色
  3. 祖父节点变为红色
  4. 祖父节点变为当前节点,继续往上递归即可

叔叔节点是黑色,并且当前节点是父亲节点的右儿子

  1. 将父节点作为新的当前节点
  2. 以新的当前节点为支点进行左旋

叔叔节点是黑色,且当前节点是父节点的左孩子

  1. 将父节点变成黑色
  2. 将祖父节点变成红色
  3. 以祖父节点为支点进行右旋

删除

补充:二叉搜索树删除–当左右节点都非空时

  1. 找到该节点的右子树中的最左节点(也就是右子树中序遍历的第一个节点)
  2. 把它们的值和要删除的节点的值进行交换
  3. 然后删除这个节点即相当于把我们想删除的节点删除了(方法可以转换成只有左节点或只有右节点或是叶子节点的情况)

前情提要

  • 红+黑和黑+黑是指,当一个红节点或黑色节点被删除后,为了是的红黑树性质五不被破坏,会将其颜色保留加到上一个节点以维护性质五。
  • 删除的是红色点时无需做任何操作
  • 删除的是黑色点时,将子节点上移并变成红+黑或黑+黑

1. x指向一个红+黑节点

将x设为一个黑节点即可

2. x指向根

将x设为一个黑节点即可

3.1 x的兄弟节点是红色

  1. 将x的兄弟节点设为黑色
  2. 将x的父节点设为红色
  3. 对x的父节点进行左放
  4. 左旋后,重新设置x的兄弟节点

3.2 x的兄弟节点是黑色,x的兄弟节点的两个孩子都是黑色

  1. 将x的兄弟节点设为红色(将兄弟节点变为红色)
  2. 设置x的父节点为新的x节点(将处理的节点往上移一层)

3.3 x的兄弟节点是黑色,x的兄弟节点的左孩子是红色,右孩子是黑色的

  1. 将x兄弟节点的左孩子设为黑色
  2. 将x兄弟节点设为红色
  3. 对x的兄弟节点进行右旋
  4. 右旋后,重新设置x的兄弟节点

3.4 x的兄弟节点是黑色,x的兄弟节点的右孩子是红色的,x的兄弟节点的左孩子任意颜色

  1. 将x父节点颜色赋值给x的兄弟节点
  2. 将x父节点设为黑色
  3. 将x兄弟节点的右子节点设为黑色
  4. 对x的父节点进行左旋(旋转后即可从黑+黑变为黑色)

详细介绍红黑树 性质 定义 插入删除操作相关推荐

  1. 左倾红黑树(LLRBT)删除操作及相关性质总结答疑

    Left-leaning Red Black Tree 看算法4(算法 第4版 Algorithms 4th Edition)3.4节时,后面的习题有实现左倾红黑树删除操作的代码,刚开始看得云里雾里的 ...

  2. 数据结构之红黑树(三)——删除操作

    删除一个节点相同有可能改变树的平衡性,并且,删除所造成的不平衡性比插入所造成的平衡性的修正更加复杂. 化繁为简是算法分析中一个经常使用的方法.以下我们将欲删除节点分为三大类:欲删除节点为叶子节点.欲删 ...

  3. 红黑树 键值_Java集合框架:红黑树概念、插入及旋转操作详细解读就问你会不会...

    初识TreeMap 之前的文章讲解了两种Map,分别是HashMap与LinkedHashMap,它们保证了以O(1)的时间复杂度进行增.删.改.查,从存储角度考虑,这两种数据结构是非常优秀的.另外, ...

  4. 红黑树原件 及其插入、删除(附图说明)

    一.概念 R-B Tree,全称是Red-Black Tree又称红黑树,它是一种特殊的二叉查找树,红黑树的每个节点上都有存储位表示节点的颜色,可以是红或黑. 二.特性 每个节点或者是红色,或者是黑色 ...

  5. 为什么红黑树查询快_目前最详细的红黑树原理分析(大量图片+过程推导!!!)...

    一.为什么要有红黑树这种数据结构? 我们知道ALV树是一种严格按照定义来实现的平衡二叉查找树,所以它查找的效率非常稳定,为O(log n),由于其严格按照左右子树高度差不大于1的规则,插入和删除操作中 ...

  6. 目前最详细的红黑树原理分析(大量图片+过程推导!!!)

    一.为什么要有红黑树这种数据结构?   我们知道ALV树是一种严格按照定义来实现的平衡二叉查找树,所以它查找的效率非常稳定,为O(log n),由于其严格按照左右子树高度差不大于1的规则,插入和删除操 ...

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

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

  8. 顺序表和单链表的插入删除操作时间复杂度的区别

    顺序表和单链表的插入删除操作时间复杂度的区别 最近在学习数据结构,看到如果需要用到大量的插入和删除操作,单链表的效率会高于顺序表.看到这里时内有有个疑惑,这两种数据结构的插入和删除操作的时间复杂度不都 ...

  9. 红黑树的定义与运用场景

    一.定义 红黑树的五个性质: 一般的,红黑树(一棵自平衡的排序二叉树),满足以下性质,即只有满足以下性质的树,我们才称之为红黑树: 1)每个结点要么是红的,要么是黑的. 2)根结点是黑的. 3)每个叶 ...

最新文章

  1. 8086汇编语言指令总结
  2. 嵌入式Linux上通过boa服务器实现cgi/html的web上网【转】
  3. EXE和SYS通信(ReadFile WriteFile) 其他方式
  4. 数据库:MySQL、HBase、ElasticSearch三者对比
  5. Java线程中关于Synchronized的用法
  6. github 建立_建立在线社区:GitHub教师
  7. Java GridBagLayout简单电子邮件发送界面的实现
  8. 清除mysql数据碎片_MySQL 清除表空间碎片方法总结
  9. Java性能调优:利用VisualVM进行性能分析
  10. 输入广义表建立子女兄弟链表示的树
  11. 解决Anaconda第三方库下载慢
  12. Scratch妙笔生花
  13. 如何在古董级IPAD上修改植物大战僵尸游戏金币
  14. SVN版本控制介绍与使用(超详细版)
  15. DLNA实现本地媒体服务器
  16. 你真的知道如何使用Target.Count吗?
  17. Spring漫画学习笔记(一) 什么是BeanDefinition
  18. 算法的时间复杂度排序
  19. 常见英文缩写小节-江晚正愁余-iteye技术网站
  20. opengl 画椭圆_如何画椭圆的共轭半径及其他......

热门文章

  1. oracle sql 符号,Oracle的SQL语句中如何处理‘’符号
  2. android 换机 iphone8,iPhone 8屏幕大升级 给了安卓用户一个换机理由
  3. 自动化篇 - 为闲鱼制作一个客服机器人(上)
  4. Idea配置 vue 插件和 vue 项目的建立
  5. 必贝特科创板IPO过会:预计2025年前实现商业化,钱长庚为实控人
  6. 递归实现字符串倒序输出
  7. 基于高德地图JSAPI 开发移动端地图红包
  8. [收藏]C++大师Stan Lippman:我对中国程序员的忠告
  9. 勒索病毒WannaCry还没搞定 比它更厉害的永恒之石又来了
  10. 【机器学习】- 仿射变换/仿射函数