zoukankan      html  css  js  c++  java
  • 红黑树——1.介绍与查找


        红黑树(Red Black Tree),红黑树由Rudolf Bayer1972年发明,当时被称为平衡二叉B树(symmetric binary B-trees),1978年被Leonidas J. Guibas Robert Sedgewick改成一个比较摩登的名字:红黑树。一开始说说它的历史是有必要的。

        红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。
        既然是自平衡二叉树,那么他必定满足二叉树和平衡二叉树的条件,同时请不要把平衡二叉树与完全二叉树混淆。
        补充二叉树的条件如下:
            1)树中的每个结点最多只有两棵子树,即树中任何结点的度数不得大于2。
            2)树有左右之分,而且,子树的左右次序是重要的,即使在只有一棵子树的情况下,也应分清是左子树还是右子树
        平衡二叉树的条件,在满足二叉树的前提下,还必须满足:
            它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差的绝对值不超过1.

        一棵好的平衡二叉树的特征:
            (1)保证有n个结点的树的高度为O(logn)
            (2)容易维护,也就是说,在做数据项的插入或删除操作时,为平衡树所做的一些辅助操作时间开销为O(1)

        同时请注意,这里边会涉及到:节点的前序、中序、后序遍历。
        通常我们会把树设计成这样:
                        (10)
                     /            \
                  (8)             (68)
                 /    \            /      \
             (4)      (9)     (54)     (98)
            /    \              /    \        \
         (2)     (6)      (21)  (57)     (100)
        从上观察,我们发所有现节点都大于他的左孩子,小于它的右孩子,且左子树<右子树
        另外,左子树和右子树的高度之差的绝对值不超过1.
        你可以先入为主的这样认为!!!

    又了以上补充之后,下面继续介绍红黑树(他在linux内核中随处可见,常用在linux内存管理上面)。
    它的优点: 是它可以在O(log n)时间内做查找,插入和删除,这里的n是树中元素的数目。

    它有以下几个特性:(请先记住,后面我将会利用这些特性来分享它的插入和删除操作,由于查找操作非常容易,就不解释了)

    红黑树是每个节点都带有颜色属性的二叉搜索树,颜色或红色或黑色。在二叉搜索树强制一般要求以外,对于任何有效的红黑树我们增加了如下的额外要求:

    性质1. 节点是红色或黑色。

    性质2. 根是黑色。

    性质3. 所有叶子都是黑色(包括NIL)。

    性质4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)

    性质5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
  • 相关阅读:
    Python基础语法 第2节课(数据类型转换、运算符、字符串)
    python基础语法 第5节课 ( if 、 for )
    python基础语法 第4节课 (字典 元组 集合)
    Python基础语法 第3节课 (列表)
    A. Peter and Snow Blower 解析(思維、幾何)
    C. Dima and Salad 解析(思維、DP)
    D. Serval and Rooted Tree (樹狀DP)
    C2. Balanced Removals (Harder) (幾何、思維)
    B. Two Fairs 解析(思維、DFS、組合)
    D. Bash and a Tough Math Puzzle 解析(線段樹、數論)
  • 原文地址:https://www.cnblogs.com/p2liu/p/6048774.html
Copyright © 2011-2022 走看看