红黑树

1.概念数组

红黑树是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,典型的用途是实现关联数组。它是在1972年由鲁道夫·贝尔发明的,他称之为"对称二叉B树",它现代的名字是在 Leo J. Guibas 和 Robert Sedgewick 于1978年写的一篇论文中得到的。它是复杂的,但它的操做有着良好的最坏状况运行时间,而且在实践中是高效的: 它能够在O(log )时间内作查找,插入和删除,这里的是树中元素的数目。数据结构

它的统计性能要好于平衡二叉树(有些书籍根据做者姓名,Adelson-Velskii和Landis,将其称为AVL-树),所以,红黑树在不少地方都有应用。在C++ STL中,不少部分(目前包括set, multiset, map, multimap)应用了红黑树的变体(SGI STL中的红黑树有一些变化,这些修改提供了更好的性能,以及对set操做的支持)。其余平衡树还有:AVLSBT伸展树TREAP 等等。性能

2.性质ui

红黑树是每一个节点都带有颜色属性的二叉查找树,颜色或红色或黑色。在二叉查找树强制通常要求之外,对于任何有效的红黑树咱们增长了以下的额外要求:htm

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

性质2. 根节点是黑色。get

性质3 每一个叶节点是黑色的。it

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

性质5. 从任一节点到其每一个叶子的全部路径都包含相同数目的黑色节点。计算机科学

这些约束强制了红黑树的关键性质: 从根到叶子的最长的可能路径很少于最短的可能路径的两倍长。结果是这个树大体上是平衡的。由于操做好比插入、删除和查找某个值的最坏状况时间都要求与树的高度成比例,这个在高度上的理论上限容许红黑树在最坏状况下都是高效的,而不一样于普通的二叉查找树。

要知道为何这些特性确保了这个结果,注意到性质4致使了路径不能有两个毗连的红色节点就足够了。最短的可能路径都是黑色节点,最长的可能路径有交替的红色和黑色节点。由于根据性质5全部最长的路径都有相同数目的黑色节点,这就代表了没有路径能多于任何其余路径的两倍长。

相关文章
相关标签/搜索