rbtree原理及应用--前世今生及性质

来源:互联网 发布:高性能网络编程1 编辑:程序博客网 时间:2024/06/05 11:50

历史


      在1972年,德国的计算机科学家Rudolf Bayer发明了一种特殊的4阶的B-树结构,这种数据结构保存了所有的从根到叶结点的拥有相同结点的路径,创建出来的理想平衡树。但是,这种树并不是二叉搜索树,所以,Bayer在他的论文中称它们为“平衡二叉B-树”,后来,这种树变成了流行的2-3-4树。
      1978年,一篇《A Dichromatic Framework for Balanced Trees》论文中,Leonidas J. Guibas和Robert Sedgewick在平衡B-树的基础上衍生出了红黑树。 选择颜色中的红色,是因为他们在施乐帕克研究中心(Xerox PARC)工作期间,红色是当时的彩色激光打印机打印出来的最好看的颜色。另一种说法是,根据Guibas的表述,当时是因为他们只有红色和黑色两种笔来绘制这棵树。
      在1993年,Arne Andersson介绍了一种简化插入和删除操作的恰当地学习树的方法。
      1999年,Chris Okasaki展示了使得插入操作十足功能性的方法,它的平衡方法需要关注仅仅只有4中不平衡情况和一种默认平衡的情形。
      初始的算法需要处理8中不平衡情形,Cormen et al.后来将这个缩减到6中不平衡情形。Sedgewick表示,插入操作仅仅需要46行的Java代码就可以完成。在2008年Sedgewick结合Andersson的简化算法的思想,提出了左倾红黑树(left-1ing Red-Black Tree, LLRB)。Sedgewick最初允许结点可以拥有两个红色孩子,以便让这棵树看起来更像是2-3-4树,但是后来,这个增加的限制,让这棵新的树更像是2-3树。Sedgewick仅仅使用33行代码就实现了插入算法,大大缩短了最初的46行代码。


红黑树的性质


1)每个结点或是红色的,或是黑色的;
2)根结点是黑色的;
3)每个叶结点(NIL)是黑色的;
4)如果一个结点是红色的,则它的两个子结点都是黑色的;
5)对每个结点,从该结点到其所有后代叶结点的简单路径上,均包含相同数目的黑色结点。