红黑树——1.介绍与查找
红黑树(Red Black Tree),红黑树由Rudolf Bayer于1972年发明,当时被称为平衡二叉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. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。