数据结构与算法:红黑树插入调整方案

开发 前端
直接让新结点变色为黑色,规则2得到满足。同时,黑色的根结点使得每条路径上的黑色结点数目 都增加了1,所以并没有打破规则5。

红黑树插入有五种情况,每种情况对应着不同的调整方法:

一、 新结点(A)位于树根,没有父结点。

直接让新结点变色为黑色,规则2得到满足。同时,黑色的根结点使得每条路径上的黑色结点数目 都增加了1,所以并没有打破规则5。

二、 新结点(B)的父结点是黑色

新插入的红色结点B并没有打破红黑树的规则,所以不需要做任何调整

三、 新结点(D)的父结点和叔叔结点都是红色

两个红色结点B和D连续,违反了规则4。因此我们先让结点B变为黑色。

这样一来,结点B所在路径凭空多了一个黑色结点,打破了规则5。因此我们让结点A变为红色

结点A和C又成为了连续的红色结点,我们再让结点C变为黑色

四、 新结点(D)的父结点是红色,叔叔结点是黑色或者没有叔叔,且新结点是父结点的右孩子,父结 点(B)是祖父结点的左孩子

我们以结点B为轴,做一次左旋转,使得新结点D成为父结点,原来的父结点B成为D的左孩子

这样进入了情况5。

五、新结点(D)的父结点是红色,叔叔结点是黑色或者没有叔叔,且新结点是父结点的左孩子,父结 点(B)是祖父结点的左孩子

我们以结点A为轴,做一次右旋转,使得结点B成为祖父结点,结点A成为结点B的右孩子

接下来,我们让结点B变为黑色,结点A变为红色。

经过上面的调整,这一局部重新符合了红黑树的规则。

责任编辑:武晓燕 来源: 今日头条
相关推荐

2020-10-30 09:56:59

Trie树之美

2022-09-26 07:56:53

AVL算法二叉树

2021-03-18 08:44:20

Java数据结构算法

2022-09-21 07:57:33

二叉搜索树排序二叉树

2017-10-10 16:59:28

Java数据结构算法解析

2020-09-17 07:37:09

红黑树数据结构

2020-10-21 14:57:04

数据结构算法图形

2021-04-07 09:26:37

Java数据结构算法

2023-09-22 11:17:50

红黑树结构数据结构

2023-03-08 08:03:09

数据结构算法归并排序

2023-10-27 07:04:20

2020-11-02 09:15:47

算法与数据结构

2023-03-10 08:07:39

数据结构算法计数排序

2023-03-02 08:15:13

2021-03-24 10:41:04

Java数据结构算法

2021-09-29 18:28:41

数据结构算法最小生成树

2020-05-06 16:41:36

红黑树二叉查找树

2023-03-07 08:02:07

数据结构算法数列

2023-04-27 09:13:20

排序算法数据结构

2017-08-31 09:45:43

JavaArrayList数据
点赞
收藏

51CTO技术栈公众号