红黑树
一、红黑树的介绍
先来看下算法导论对R-B Tree的介绍:
红黑树,一种二叉查找树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。
通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其
他路径长出俩倍,因而是接近平衡的。
前面说了,红黑树,是一种二叉查找树,既然是二叉查找树,那么它必满足二叉查找树的一般性质。
下面,在具体介绍红黑树之前,咱们先来了解下 二叉查找树的一般性质:
1.在一棵二叉查找树上,执行查找、插入、删除等操作,的时间复杂度为O(lgn)。
因为,一棵由n个结点,随机构造的二叉查找树的高度为lgn,所以顺理成章,一般操作的执行时间为O(lgn)。
//至于n个结点的二叉树高度为lgn的证明,可参考算法导论 第12章 二叉查找树 第12.4节。
2.但若是一棵具有n个结点的线性链,则此些操作最坏情况运行时间为O(n)。
而红黑树,能保证在最坏情况下,基本的动态几何操作的时间均为O(lgn)。
ok,我们知道,红黑树上每个结点内含五个域,color,key,left,right。如果相应的指针域没有,则设为NIL。
一般的,红黑树,满足以下性质,即只有满足以下全部性质的树,我们才称之为红黑树:
1)每个结点要么是红的,要么是黑的。
2)根结点是黑的。
3)每个叶结点,即空结点(NIL)是黑的。
4)如果一个结点是红的,那么它的俩个儿子都是黑的。
5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。
在这里包括楼主第一次在学习这个红黑树的时候,完全不明白第5句话什么意思,啥叫“子孙节点上的所有路径上包含相同的黑结点数”,读起来真心绕,1遍云里雾里,2遍继续,3遍晕了(此处如果有算法大神,请不要来打击小弟,小弟仅仅只是分享,帮助新学习红黑树的哥们们,少走点弯路),然后楼主根据前四条自己总结第5条规律,发现任何一条路径从根节点,到它的子女的最底端的黑结点数目都是相同的,再回过来看这个第5点就恍然大悟了!(不懂得同学请看图):
例如:1,2,3黑结点;1,2,4也是3个黑结点;1,6,7也是3个黑结点等
下图所示,即是一颗红黑树: