红黑二叉查找树

截取算法(第四版)

替换3-节点:

红黑二叉查找树背后的基本思想是用标准二叉查找树(完全2-节点构成)一些额外的信息(替换3-节点)来表示2-3树

红黑树中的链接分为两种:

1、 将两个2-节点连接起来构成3-节点的红链接

2、 2-3树中的普通链接为黑链接

两个-2节点用左斜的红色链接链起来可表示3-节点

 

一种等价的定义:

 

一一对应

1、 如果将一颗红黑树中的红链接画平,那么所有的空链接到根节点的距离都是相同的

2、 如果将由红链接相连的节点合并,得到的就是一颗2-3树

3、 红黑树二叉查找树又是2-3树

 

 

颜色表示

增加一个颜色域以表示指向该节点(他的双亲节点指过来)链接的颜色

如果指向该节点的链接是红色的,该节点的颜色域内应该表示红色,否则表示为黑

我们约定空链为黑色。

:提及一个节点的颜色时,指的是指向该节点的链接的颜色


旋转

实现某些操作时可能出现红色右链接或是两条连续的红链接,这不符合红黑树定义的,我们需要对其进行旋转操作,改变红链接的方向。

左旋转

 

动画:

rotate left in red black tree

右旋转

 

动画:

 rotate right the red black tree

旋转操作:

1、 只是将两个键中的较小者作为根节点变为将较大者作为根节点

2、 可以保持红黑树的重要性质:有序性、完美平衡不存在两条连续的红链接、不存在红色的右链接。

2-节点插入新键

1、 如果新键小于老键,新增一个红色节点,添加后新红黑树和单个3-节点完全等价

2、 如果新键大于老键,那么新增的红色节点会产生一条红色右链接需要将其左旋转来修正红色右链接修正根节点的连接

:插入新节点时,总是用红链接将它与双亲节点链接

 

 

 

一个3-节点插入新键:

将其分为三种情况:

1、新键小于树中的两个键2新键大小在两者之间3新键大于树中的两个节点

三种情况都会产生两条红链接同时链接一个节点的情况,我们应该旋转以修正它:

1) 新键大于原树中的两个键,新键被链接到3-节点的右节点,此时树是平衡的,根节点为中间大小的键,它有两条红链分别和较小、较大的节点相链。将两条红链的颜色变黑,就得到了一颗由三个节点组成,高为2的平衡树。且能对应一颗2-3树。

即:新节点的链接是3-节点的右链接,转换颜色即可

2) 新键小于原树中的两个键,新键被链接到最左边的空链,这时产生了两条连续的左红链,将上层的红链接右旋转使树转换为第(1)种情况

即:新节点的链接是3-节点的左链接,右旋转上层链接再转换颜色

3) 新键介于原树中的两个键之间,也会产生两条连续的红链接,一条左红链接一条右红链接,将下层的红链接左旋转使树转换为第(2)种情况

即:新节点的连接时3-节点的中链接,左旋转下层链接,接着右旋转上层,再转 换颜色

 

 

 

颜色转换:

当原树中根节点各链接出去一个红色链接时,我们应该转换链接的颜色。将链接出去的左右红链接变黑,再将链接到根的链接变红。即将子节点颜色由红变黑,将父节点的颜色由黑变红。

 

颜色的变换是局部的,不会影响整棵树的黑色平衡性。

将红色链接在树中向上传递

                                                                                   

红黑树构造动画:

 

 性能总结:

 

以升序键插入构造红黑二叉查找树

insert in ascending order rb tree

以降序键插入构造红黑二叉查找树

insert in descend order rb tree

随机插入构造红黑二叉查找树

insert in random order rb tree

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值