算法导论第十三章:红黑树

一棵高度为h的查找树的各种操作的性能为O(h),当树的高度较低时,性能较好,当高度很高时,和链表没什么区别。从上一章可以知道,随机构造的二叉查找树的期望高度为Olgn)。本章介绍一种平衡的查找树:红黑树,确保在最坏情况下,基本动态集合的操作时间为O(lgn)

 

红黑树的性质:

1)  每个结点是红的或黑的

2)  根节点是黑的

3)  每个叶节点(NIL)是黑的

4)  如果一个结点是红的,那么它的两个儿子是黑的;换言之红结点的父节点必然是黑的

5)  对每个结点,从该节点到该子树所有叶结点的所有路径上,包含相同数目的黑结点

 

为了方便处理,我们用一个哨兵来代表NIL结点,该节点是黑的,不存储实际数据,数据存储在内部节点上。

 

在定义从某个结点出发(不包括该结点)到达一个叶子结点的任意一条路径上黑结点的个数为黑高度bh(x)

 

红黑树的高度:一棵n个内结点的红黑树的高度至多为2lg(n+1)

先证明一棵以结点x为根的子树至少包含内结点数,采用数学归纳法。对黑高度为0,则包含内节点数为0,上式成立。对于结点x来说,考虑x的颜色,它的两棵子树的黑高度可能为bh(x)-1bh(x),那么以x为根的子树包含的内节点数至少为

有了上面的引里,可知一棵树的黑高度bh <= lg(n+1),又树高度h最多为黑高度的两倍,所以有 h <= 2lg(n+1)

 

还有另外一种证明方法:

假设将所有的红结点收缩到其黑父结点中,其孩子成为其父的孩子。那么红黑树将会变成一棵只包含黑结点的树,每个内结点最多有4个孩子结点,最少有2个孩子结点,树的高度为原树的黑高度。

依据二叉树的性质,原树的叶节点树为 n+1 n为内结点数。上述的收缩后的树叶节点的数目不变,同时这棵收缩树的特征又有 n+1 <= 4bh,且n+1>=2bh。于是bh <= lg(n+1) h<2lg(n+1)

 

红黑树的插入和删除

将一个结点插入红黑树,可能会破坏红黑树的性质,这个时候要通过旋转和重新着色来保持红黑树的性质。在不同的case下有不同的旋转和着色方法,原书中有详细的说明,这里不再赘述。

删除操作也是类似的。

 

 

思考题:

AVL

AVL树是一棵高度平衡的二叉树,在每一个结点里面维护一个额外的域h(x),即结点的高度。AVL树要求任何结点的左子树和右子树的高度最多差1

 

1)  n个结点的AVL树的高度为O(lg(n))

用数学归纳法,高度为1的树的结点数F1>=2。依据AVL的定义,Fk>=Fk-1+Fk-2。可知高度为hAVL树的最少节点数就是第h个斐波那契数。

 

2)将一个结点插入AVL树,可能引起高度的不平衡,此时需要进行旋转。

posted on 2011-02-26 10:08  longhuihu  阅读(203)  评论(0编辑  收藏  举报