1. 红黑树的概念
红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或
Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路
径会比其他路径长出俩倍,因而是接近平衡的。
例如:
2. 红黑树的性质
1. 每个结点不是红色就是黑色
2. 根节点是黑色的
3. 如果一个节点是红色的,则它的两个孩子结点是黑色的
4. 对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点
5. 每个叶子结点都是黑色的(此处的叶子结点指的是空结点)
如何理解以上性质呢:
首先,根据红黑树的主要特点:最长路径中节点个数不会超过最短路径节点
个数的两倍。在以上性质的约束下,我们可以假设出最长路径和最短路径的差值来看看他是否符合要求。例如:

可以看到,通过几条性质的约束,的确可以使最长路径中节点个数不会超过最短路径节点个数的两倍,从而达到整棵树的相对平衡。
3. 红黑树插入
和AVL树一样,在插入节点破坏树的平衡的情况下,红黑树也要进行旋转操作来维持树的平衡。那么什么情况下红黑树会进行旋转,如何旋转呢?
3.1 插入变色/旋转
在进行旋转操作之前,我们首先要决定插入节点的颜色:
黑色可以吗?根据性质4(对于每个结点,从该结点到其所有后代叶结点的简单路径上,均 包含相同数目的黑色结点),如果我们将插入节点设为黑色,则一定会破坏规则,由于树形结构的路径具有唯一性,插入节点一定会违反性质4。
所以我们默认设定除根节点外的(性质2)插入节点为红色。
那么就有了以下几种情况:
情况1:

情况2:

情况3:

3.2删除
和AVL树一样,红黑树的删除比较复杂,掌握插入的原理就够用了,这里不再详细说明。

最低0.47元/天 解锁文章
984

被折叠的 条评论
为什么被折叠?



