zoukankan      html  css  js  c++  java
  • 算法导论第十三章:红黑树

    一棵高度为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树,可能引起高度的不平衡,此时需要进行旋转。

  • 相关阅读:
    网络编程2018-4-23
    网络编程
    异常处理
    在Asp.net core使用配置Json创建动态目录树
    Asp.net Core中文转换成拼音
    解决Asp.Net core 控制台出现乱码的情况
    解决Asp.net Core中chtml文档中文乱码的问题
    取代Ajax.BeginForm的ajax使用方法
    将数据库模型放入到.Net Core的类库中
    如何使用Resource资源文件
  • 原文地址:https://www.cnblogs.com/longhuihu/p/10423367.html
Copyright © 2011-2022 走看看