算法导论-红黑树基本概念

来源:互联网 发布:淘宝上李宁官方网店 编辑:程序博客网 时间:2024/06/16 03:43

刚刚接触到红黑树的时候,感觉很奇怪,二叉树已经很好用了,为什么要发明红黑树??看到算法导论的目录才明白,二叉树在执行查找,删除操作的时候,时间复杂度为O(h),这时间复杂度与二叉树的高度有关,如果二叉树高度较小,自然很方便,但是如果遇到树的高度较高时(所有的数据都在一根树枝上),二叉树和链表就差别不大了。所以发明了红黑树,红黑树是一种平衡搜索树,红黑树的高度最多为2lg(n+1),时间复杂度为O(h'),h'<2lg(n+1),所以红黑树相对于二叉树而言性能更好。

首先说明红黑树的五大性质:

1.每个节点不是黑色就是红色,非黑即红。

2.根节点一定是黑色。

3.每个叶节点一定是黑色。

4.每个红色节点的两个子节点为黑色。

5.对于每个节点,该节点到所有后代叶节点的路径上黑色节点的数目相同。

然后定义:红黑树的节点的黑高指得是节点x某支路上黑色节点的数目(不包括节点x,但是包括叶节点(NIL))。

引理:一棵具有n个节点的红黑树,其树高至多为2lg(n+1)

证明:

方法1(数学归纳法):

首先我们要证明节点x的红黑树具有2^bh(x)-1个内部节点(bh(x)表示节点x的黑高)

1.当具有节点x的红黑树的树高为0时,黑高也为0,则内部节点为0,符合上述公式。

2.假设当节点x的红黑树高度不为0时,不妨设黑高为bh(x),则其子节点的黑高为bh(x)或bh(x)-1,假设其子节点满足上述式子,则有

其子节点至少有2^(bh(x)-1)-1个内部节点,则节点x的内部节点可得2^(bh(x)-1)-1+2^(bh(x)-1)-1+1=2^bh(x)-1,结果与上述结论相同,故命题得证。

由红黑树的性质4可知,黑色节点一定比红色节点多,则树高h<=2bh(x),则有n>2^(h/2)-1,化简可得h<=2lg(n+1)。

方法2:

                                                     

假设红黑树如上图所示,现将红色节点与其黑色的父节点合并,合并后的红黑树图如下图所示:

                                                

这是一颗2-3-4树,这棵树的高度等于黑高bh(x),每个节点最少包含两个最多包含四个节点,则该树内部节点数目2^(bh(x))-1<n<4^(bh(x))-1,得到了证明一同样的结论,同理可知h<2bh(x),同上可知h<2lg.(n+1)。








原创粉丝点击