红黑树添加和删除原理

  • 一、概念
  • 二、特性
  • 三、应用
  • 四、基本操作——插入
    • 1、简介
    • 2、插入规则
    • 3、红黑树插入的4种情形
    • 4、插入图例
  • 五、基本操作——删除
    • 1、红黑树删除的情形
    • 2、插入图例

转载自:https://my.oschina.net/u/3272058/blog/1914452

一、概念

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

二、特性

1、每个节点或者是红色,或者是黑色

2、根节点是黑色的

3、每个叶子节点(NIL)是黑色的。注意:这里的叶子节点,是指为空的叶子节点

4、如果一个节点是红色的,则它的子节点必须是黑色的

5、从任意一个节点到其叶子的所有路径中,所包含的黑节点数量是相同的

特性解析1:根据特性4可知,从每个叶子节点到根节点的所有路径中不能有两个连续的红节点

特性解析2:根据特性5可知,没有一条路径会比其它路径长出两倍,因而红黑树是接近平衡的二叉树

三、应用

红黑树主要用于存储有序的数据,它的时间复杂度是O(logn),非常高效

四、基本操作——插入

1、简介

红黑树的基本操作是添加和删除,在对红黑树进行添加和删除之后,都会用到旋转方法。为什么要用旋转方法呢?因为添加或删除红黑树的节点之后,红黑树就发生了变化,可能就不满足红黑树的5条性质了,也就不是一颗红黑树了。而通过旋转可以使这棵树重新成为红黑树,即旋转的目的就是为了保证红黑树的特性

左旋:对节点x进行左旋,意味着将“x的右孩子变成x的父亲”,而将“x原先的右孩子的左孩子变成x的右孩子”。即左旋中的“左”是指将别旋转的节点变成一个左节点

右旋:对节点x进行右旋,意味着将“x的左孩子变成x的父亲,而将”x原先的左孩子的右孩子变成x的右孩子“。即右旋中的”右“是指将被旋转的节点变成一个右节点

2、插入规则

新插入的节点都为红色

3、红黑树插入的4种情形

(1)新节点位于根节点,其没有父节点时,处理思路:将该节点直接设为黑色即可

(2)新节点的父节点已然是黑色时,处理思路:不用动,这已然是一颗红黑树

(3)父节点和叔节点都是红色时,处理思路:a.将父节点和叔节点设为黑色;b.将祖父节点设为红色;c.将祖父节点设为当前节点,并继续对新当前节点进行操作

(4)父节点是红色,叔节点是黑色时,又分如下四种情况:

  • 当前节点是父亲的左孩子,父亲是祖父的左孩子(Left-Left),处理思路:a.将祖父节点右旋;b.交换父节点和祖父节点的颜色
  • 当前节点是父亲的右孩子,父亲是祖父的左孩子(Right-Left),处理思路:a.将父节点左旋,并将父节点作为当前节点; b.然后再使用Left Left情形
  • 当前节点是父亲的右孩子,父亲是祖父的右孩子(Right-Right),处理思路:a.将祖父节点左旋;b.交换父节点和祖父节点的颜色
  • 当前节点是父亲的左孩子,父亲是祖父的右孩子(Left-Right),处理思路:a.将父节点右旋,并将父节点作为当前节点; b.然后再使用Right Right情形

4、插入图例

通过插入12 1 9 2 0 11 7 19 4 15 18 5 14 13 10 16 6 3 8 17完成上述所有情形的展示。

(1)插入12

说明:插入的节点若是根节点,则直接将其设置为黑色

(2)插入1

说明:插入的节点若不是根节点,则将其设置为红色

(3)插入9

(4)插入2

(5)插入0

(6)插入11

(7)插入7

(8)插入19

(9)插入4

(10)插入15

(11)插入18

(12)插入5

(13)插入14

(14)插入13

(15)插入10

(16)插入16

(17)插入6

(18)插入3

(19)插入8

(20)插入17

插入的过程讲解完毕。

五、基本操作——删除

1、红黑树删除的情形

一、从树中删除节点X(以寻找后继节点的****方式进行删除

情况①:如果X没有孩子,且如果X是红色,直接删除X;如果X是黑色,则X为当前节点进行旋转调色,最后删掉X

情况②:如果X只有一个孩子C,交换X和C的数值,再对新X进行删除。根据红黑树特性,此时X不可能为红色,因为红色节点要么没有孩子,要么有两个黑孩子。此时以新X当前节点进行情况①的判断

情况③:如果X有两个孩子,则从后继中找到最小节点D,交换X和D的数值,再对新X进行删除。此时以新X为当前节点进行情况①或②的判断

二、旋转调色(N**=旋转调色的当前节点****[等于情况①中的X]P=N的父亲,W=N的兄弟,Nf=N的远侄子,Nn=N****的近侄子**)

情况1:N是根或者N是红色,则:直接将N设为黑色

情况2:N不是根且N是黑色,且W为红色,则:将W设为黑色,P设为红色,对P进行旋转(N为P的左子时进行左旋,N为P的右子时进行右旋),将情况转化为情况1、2、3、4、5

情况3:N不是根且N是黑色,且W为黑色,且W的左右子均为黑色,则:将W设为红色,将P设为当前节点进行旋转调色,将情况转化为情况1、2、3、4、5

情况4:N不是根且N是黑色,且W为黑色,且Nf为黑色,Nn为红色,则:交换W与Nn的颜色,并对W进行旋转(N为P的左子进行右旋,N为P的右子进行左旋),旋转后N的新兄弟W有一个红色WR,则转换为情况5

情况5:N不是根且N是黑色,且W为黑色,且Nf为红色,Nn为黑色,则:将W设为P的颜色,P和Nf设为黑色,并对P进行旋转(N为P的左子进行左旋,N为P的右子进行右旋),N设为根

2、插入图例

通过删除12 1 9 2 0 11 7 19 4 15 18 5 14 13 10 16 6 3 8 17完成上述所有情形的展示。

(1)删除12

(2)删除1

(3)删除9

(4)删除2

(5)删除0

(6)删除11

(7)删除7

(8)删除19

(9)删除4

(10)删除15

(11)删除18

(12)删除5

(13)删除14

(14)删除13

(15)删除10

(16)删除16

(17)删除6

(18)删除3

(19)删除8

(20)删除20

93865473819)]

(16)删除16

[外链图片转存中…(img-TNwM5GHx-1593865473819)]

(17)删除6

[外链图片转存中…(img-7LxtjSZN-1593865473820)]

(18)删除3

[外链图片转存中…(img-ZYxd0UTq-1593865473820)]

(19)删除8

[外链图片转存中…(img-sdUDM0L2-1593865473821)]

(20)删除20

红黑树添加和删除节点原理相关推荐

  1. 红黑树----红黑树插入和删除结点的全程演示

    引言: 目前国内图书市场上,抑或网上讲解红黑树的资料层次不齐,混乱不清,没有一个完整而统一的阐述.而本人的红黑树系列四篇文章(详见文末的参考文献),虽然从头至尾,讲的有根有据,层次清晰,然距离读者真正 ...

  2. 红黑树检索/插入/删除

    正文 红黑树也是二叉查找树,我们知道,二叉查找树这一数据结构并不难,而红黑树之所以难是难在它是自平衡的二叉查找树,在进行插入和删除等可能会破坏树的平衡的操作时,需要重新自处理达到平衡状态.现在在脑海想 ...

  3. JavaScript学习笔记:创建、添加与删除节点

    JavaScript学习笔记:创建.添加与删除节点 文章目录 JavaScript学习笔记:创建.添加与删除节点 一.DOM对象节点类型 二.创建节点 1.创建元素节点 2.创建文本节点 3.创建属性 ...

  4. 如何在 SQL Server 2005 故障转移群集中添加或删除节点(安装程序)

    如何在 SQL Server 2005 故障转移群集中添加或删除节点(安装程序) 使用此过程管理 Microsoft SQL Server 2005 故障转移群集实例中的节点. 重要提示: 若要更新或 ...

  5. JS中创建、添加、删除节点

    createElement():创建节点 appendChild():添加节点(还有一个很相似的 inertBefore():插入节点,两个参) removeChild():删除节点 <!DOC ...

  6. 算法导论 之 红黑树 - 添加[C语言]

    作者:邹奇峰 邮箱:Qifeng.zou.job@hotmail.com 博客:http://blog.csdn.net/qifengzou 日期:2013.12.24 21:00 转载请注明来自&q ...

  7. 图解集合8:红黑树的移除节点操作

    红黑树移除节点 上文详细讲解了红黑树的概念,红黑树的插入及旋转操作,根据测试代码建立起来的红黑树结构为: 本文先研究一下红黑树的移除操作是如何实现的,移除操作比较复杂,具体移除的操作要进行几次旋转和移 ...

  8. 数据结构 红黑树(RBTree)的原理与实现

    学习红黑树之前你应该保证你学过AVL树,也就是平衡二叉搜索树 数据结构 AVL树 AVL树是一棵高度平衡的二叉搜索树,其要求每个结点的高度差不能大于1,这样子就保证了其查询的时间复杂度为log2(N) ...

  9. 红黑树插入和删除的各种情况分析

    1.红黑树的定义 红黑树是一种自平衡的二叉查找树,是一种高效的查找树,定义如下: 每个节点是红色或黑色 根是黑色 所有叶子都是黑色(叶子是NIL节点) 如果一个节点是红色的,则他的两个儿子是黑色的(从 ...

最新文章

  1. PARAMETER FILE研究
  2. Interview:算法岗位面试—11.17下午上海某网**软件公司(上市)技术面之比赛考察、目标检测算法、视频分析算法考点
  3. Seven Segment Display
  4. Spring AOP在事务中的应用典范
  5. superset云主机上出现报错
  6. 华为鸿蒙系统是否上线,网友曝华为鸿蒙系统已经上线!官方回应:空欢喜一场...
  7. C 条件变量使用详解
  8. c语言综合知识,软件设计师教程综合知识集锦之C语言编程风格
  9. 炒股炒成亿万富翁? 胡润财富报告称人数还不少
  10. vs2010基于Win32API串口通信MFC实例
  11. 读书笔记:《码农增刊·游戏人生》
  12. 【数据资产】数据资产目录建设方法与案例
  13. 【唯美日出win7热门主题】
  14. forEach终止循环
  15. 小型数据集卷积神经网络CNN训练策略
  16. 【LeetCode】第643题——子数组最大平均数I(难度:简单)
  17. 基于Scrapy框架爬取豆瓣《复联4》影评,并生成词云
  18. Pytorch中的torch.where函数
  19. PPT制作(文字排版)
  20. windows和Linux查看文件MD5的方法

热门文章

  1. 网速dns怎么调快_手机dns怎么设置网速快
  2. laravel配置语言包,实现网站中英文切换
  3. MYSQL数据库跨服务器实时同步更新实践----文献阅读(污水管网水质预测)
  4. 你是哪类人?愚蠢的五大基本定律
  5. 【控制篇 / 应用】(6.0) ❀ 01. 只允许使用 QQ 和微信 (上) ❀ FortiGate 防火墙
  6. Docker:从入门到入门
  7. 如何来隐藏自己本地的ip地址进行上网?
  8. HTML5 概述及基本语法
  9. 前端做微信好友分享_前端-微信分享
  10. 电脑端同时登陆两个微信(非网页版)