algorithm - 红黑树是如何工作的?

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

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

最佳答案

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

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

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

每个二叉树节点都有一种“颜色”——红色或黑色。在 B 树类比中,每个黑色节点是适合该 B 树节点的子树的子树根。如果这个节点有红色的 child ,他们也被认为是同一个 B 树节点的一部分。因此,将红黑树转换为 B 树并返回并保留(大部分)结构是可能的(尽管在实践中没有这样做)。唯一可能的异常是,当 B 树节点有两个键和三个子节点时,您可以选择将哪个键放入等效红黑树中的黑色节点。

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

尽管这是派生出红黑树的基本思想,但实际用于插入和删除的算法被修改为在更新期间强制执行所有 B 树规则(可能有一个小异常(exception) - 我忘记了) , 但是是为二叉树形式量身定做的。这意味着与执行 B 树插入或删除相比,执行红黑树插入或删除可能会给出不同的结果结构。

更多详情,关注Wikipedia link MigDus 已经提供。

关于algorithm - 红黑树是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5813639/

相关文章:

language-agnostic - 推荐的在线片段管理器

java - 二叉树中节点的路径

data-structures - 为什么递归中序遍历的空间复杂度是 O(h) 而不是 O(n)

python - 使用堆进行大磁盘排序

algorithm - 排列未排序

language-agnostic - Map Reduce 框架/基础设施

php - 将公式保存在数据库中并在运行时替换值 php

java - 如何在线性时间内找到 2-sum?

algorithm - 枚举边和对称约束下的图

language-agnostic - 编码指南应该做什么,有什么好的指南例子吗?