红黑树是如何工作的?

时间:2011-04-28 04:30:01

标签: algorithm language-agnostic binary-tree red-black-tree

关于红黑树的问题很多,但没有一个问题可以回答它们的工作原理。为什么叫红黑?这如何保持树的平衡(从而提高了不平衡的普通二叉搜索树的性能)?我只是在寻找它的工作原理和原因的概述。

2 个答案:

答案 0 :(得分:15)

对于搜索和遍历,它与任何二叉树都相同。

对于插入和删除,应用了更复杂的算法,旨在确保树不会太不平衡。这些保证了所有单项操作总是在最差的O(log n)时间内运行,而在一个简单的二叉树中,二叉树可能变得如此不平衡,以至于它实际上是一个链表,给出了O(n)最坏情况的性能。每个单项操作。

红黑树的基本思想是模仿一棵B树,每个节点最多有3个键和4个孩子。 B树(或B +树等变体)主要用于数据库索引和存储在硬盘上的数据。

每个二叉树节点都有一个“颜色” - 红色或黑色。在B树类比中,每个黑色节点是适合该B树节点的子树的子树根。如果此节点具有红色子节点,则它们也被视为同一B树节点的一部分。因此,有可能(虽然没有在实践中完成)将红黑树转换为B树并返回,保留(大多数)结构。唯一可能的异常是,当B树节点有两个键和三个子节点时,您可以选择在等效的红黑树中的黑色节点中使用哪个键。

例如,对于红黑树,从根到叶的每一行都有相同数量的黑色节点。此规则源自B树规则,即所有叶节点处于相同深度。

虽然这是从中衍生出红黑树的基本思想,但实际上用于插入和删除的算法会被修改为在更新期间强制执行所有B树规则(可能会有一个小的例外 - 我忘了) ,但是为二叉树形式量身定制。这意味着执行红黑树插入或删除可能会为结果提供与您期望与B树插入或删除进行比较时不同的结构。

有关详细信息,请按照MigDus已提供的Wikipedia link进行操作。

答案 1 :(得分:11)

红黑树是有序二叉树,其中每个顶点都是红色或黑色。 直觉是红色顶点应该被视为与其父处于同一高度(即,红色顶点的边被认为是“水平”而不是“下降”)。 / p>

[我不相信维基百科条目明确指出这一点。]

红黑树的通常规则要求红色顶点永远不会指向另一个红色顶点。这意味着任何以黑色顶点为根的子树(bbb,bbr,rbb,rbr - 对于[left child] [root] [right child])的可能顶点排列对应234棵树。

搜索红黑树与搜索普通二叉树相同。插入和删除类似,只是在某些时候可能需要“修复”旋转以保留红黑不变量。

干杯!