algorithm - 红黑树的直觉

标签 algorithm binary-tree red-black-tree

我想了解红黑树的工作原理。我了解算法,如何在插入和删除操作后修复属性,但我不清楚。为什么红黑树比二叉树更平衡?我想理解直觉,为什么旋转和固定树属性会使红黑树更加平衡。

谢谢。

最佳答案

假设您通过按顺序插入以下项来创建普通二叉树:1、2、3、4、5、6、7、8、9。每个新项将始终是树中最大的项,并且因此插入为最右边的可能节点。你的“树”看起来像这样:

1
 \
  2
   \
    3
     .
      .
       .
        9

在红黑树(或任何类型的平衡二叉树)中执行的旋转确保任何节点的左子树或右子树都不会明显比另一个更深(通常,高度差为 0 或 1,但任何常数因子都可以。)这样,运行时间取决于树的高度 h 的操作总是 O(lg n),因为旋转保持 h = O(lg n),而在上面显示的最坏情况下 h = O(n)

特别是对于红黑树,节点着色只是一种簿记技巧,有助于证明旋转始终保持 h = O(lg n)。不同类型的平衡二叉树(AVL 树、2-3 树等)使用不同的簿记技术来维护相同的属性。

关于algorithm - 红黑树的直觉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29830064/

相关文章:

java - 在字符串集中搜索字符串排列

javascript - 在通过 javascript 以扩展形式写入数字时打印出额外的 0

c - 红黑树插入节点报错

data-structures - 在红黑树中,自顶向下删除比自底向上删除更快,空间效率更高?

c - C 语言的二维柏林噪声

c++ - 我们如何有效地从数组中找到第二个最大值?

java - 将数据存储到数组列表中,然后存储到二叉搜索树中

algorithm - 二叉搜索树中的删除

java - Tree 类应该包含什么?

java - 设置递归调用次数限制 - Java