zoukankan      html  css  js  c++  java
  • 红黑树

    一、红黑树的介绍

    先来看下算法导论对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个黑结点等

    下图所示,即是一颗红黑树:

     
  • 相关阅读:
    Polly
    ELK
    Python基础三(选择,循环)
    Python基础二(输入与输出)
    Python关键字
    Python基础一(基本类型和运算符)
    Python发展史
    在虚拟机(vmware)上安装CentOS
    centos7联网
    Hashmap的实现
  • 原文地址:https://www.cnblogs.com/diegodu/p/9190924.html
Copyright © 2011-2022 走看看