红黑树——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. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。
原文地址:https://www.cnblogs.com/p2liu/p/6048774.html