zoukankan      html  css  js  c++  java
  • 自顶向下的红黑树

    红黑树是一种自平衡二叉查找树,典型用途是构造关联数组和集合(java中的TreeMap和TreeSet)
     
    性质1. 节点是红色或黑色。
    性质2. 根节点是黑色。
    性质3 每个叶节点(NIL节点,空节点)是黑色的。
    性质4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
    性质5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
     
    时间复杂度O(log N)【ps: Θ渐进上下界, O渐进上界(最坏情况), Ω渐进下界(最好情况)】
     
    结论一:设从跟到外部节点的路径长度(PathLength,PL)为该路径上指针的个数,P与Q是红黑树上两条从跟到外部节点的路径,则有:
                                                                                 PL(P)<=2PL(Q)  
    结论二:设 红黑树高度h(不包括外部节点),内部节点个数n, 根节点的黑高度r,则以下关系成立:
                                                                               (1)h<=2r
                                                                               (2) n>= 2的r次方  - 1
                                                                               (3) h<=2log2(n+1)      
    红黑树是2-3-4树的一种等同。换句话说,对于每个 2-3-4 树,都存在至少一个数据元素是同样次序的红黑树。在 2-3-4 树上的插入和删除操作也等同于在红黑树中颜色翻转和旋转。这使得 2-3-4 树成为理解红黑树背后的逻辑的重要工具,这也是很多介绍算法的教科书在红黑树之前介绍 2-3-4 树的原因,尽管 2-3-4 树在实践中不经常使用。
  • 相关阅读:
    [置顶] 算法设计基础
    .net 多线程学习
    如何获得Repeater中的列
    npoi导出excel
    字符串的格式化问题
    用线程修改页面中的值(一)
    正则表达式的验证数值验证
    .net 线程更新页面中的值(方法二)
    .net 线程更新页面中的值(方法一)
    字符串的分割
  • 原文地址:https://www.cnblogs.com/jdbc2nju/p/7823530.html
Copyright © 2011-2022 走看看