0、 阅读前提
阅读本文的前提是必须懂得红黑树的原理,不懂的可先阅读这一篇:红黑树:定义、性质、节点插入操作
1、说明
将下列数
12、1、9、2、0、11、7、19、4、15、18、5、14、13、10、16、6、3、8、17
20个数,插入到红黑树中。
2、插入过程
(1)插入12
说明:插入的节点若是根节点,则直接将其设置为黑色
(2)插入1
说明:插入的节点若不是根节点,则将其设置为红色
(3)插入9
操作:
- 父点1 左旋
- 祖父节点12 右旋
- 交换节点9 和12 颜色。
(4)插入2
操作:
- 交换节点1、12、9 交换颜色;
- 因为9为根结点,故将9 设为黑色。
(5)插入0
父节点为黑色,故不做任何变化。
(6)插入11
父节点为黑色,故不做任何变化。
(7)插入7
操作:
- 节点0、2 设为黑色,节点1、7 设为红色;
(8)插入19
父节点为黑色,故不做任何变化。
(9)插入4
操作:
- 节点7 右旋
- 节点2 左旋
- 节点2、4、7 交换颜色
(10)插入15
操作:
- 节点11、19设为黑色,节点12设为红色。(父叔同红,红加黑)
(11)插入18
操作:
- 节点15 左旋
- 节点19 右旋
- 节点18 设为黑色、15、19设为红色 (父叔同红,黑加红)
(12)插入5
操作:
- 节点2、7设为黑色,节点5、4设为红色。(红加黑)
- 将节点4 的父节点1、12设为黑色,祖节点9设为 红色(红加黑)
- 因为9 为根节点,故将9设为红色。
(13)插入14
操作:
- 节点15、19设为黑色,节点18设为红色。(父叔同红,红加黑)
(14)插入13
操作:
- 节点15 右旋;
- 节点14 设为黑色,节点15 设为红色。(黑加红)
(15)插入10
父节点为黑色,故不做任何变化。
(16)插入16
操作1:
- 节点13、15 设为黑色,节点14 设为红色;(父叔同红,红加黑)
操作2:
节点14 为当前节点,14、18同为红色,故需要左右旋。操作如下:
- 节点18 右旋
- 节点12 左旋
- 交换12、14的颜色 (黑加红)
(17)插入6
操作:
- 节点5 左旋
- 节点7 右旋
- 6、7 交换颜色(黑加红)
(18)插入3
父节点为黑色,故不做任何变化。
(19)插入8
操作1:
- 节点距5、7设为红色、6 设为黑色;
操作2:
节点6 为当前节点。
- 祖父节点1 左旋
(20)插入17
操作1:
- 节点17的祖父节点15左旋
- 交换15、16的颜色
3、最终结果
插入完毕,最后的结果是