【问题标题】:How to create red black tree with max height?如何创建最大高度的红黑树?
【发布时间】:2017-09-17 15:55:31
【问题描述】:

红黑树的最大高度为2 * log(n+1),因此如果节点数为15,则最大高度应为2 * log(16)8。我一直在尝试绘制高度为8 的红黑树,而只使用15 节点,但如果不违反红黑树的规则,我就无法这样做。如何使用15 节点创建高度为8 的红黑树?

【问题讨论】:

  • 2log(16) 不是 8。
  • @500-InternalServerError 我假设 OP 表示 log-base-2 而不是 log-base-10,就像二叉树通常那样。
  • 该公式是高度的上限,但实际上并未计算最大可达到的高度
  • @Dukeling:我来自哪里,log2(16) = 4。
  • @500-InternalServerError 是的,所以 2log2(16) = 8。

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


【解决方案1】:

从我从 CLRS 读取的伪代码。当您在树中新插入一个红色节点时,似乎达到了最大高度,然后再应用任何旋转来更改颜色或平衡树。以下树演示了外部节点 = 3,最大高度 = 4:

       black(h=4)
     /       \
   nul      red(h=3)
            /    \
          nul   red (h=2)
               /    \
             nul     nul (h=1)

然后树会旋转并通过向左旋转来固定新插入的红色节点

       black(h=3)
     /       \
   red      red(h=2)
  /   \    /    \
 nul  nul nul   nul(h=1)

结果高度降低并满足所有要求。

【讨论】:

    【解决方案2】:

    proof h(root) ≤ 2·log2(n+1) 不产生 的原因至少有两个紧上限:

    1. 它假设一个节点的子节点的“黑色高度”比节点本身的小一。这是一种简化,因为它很可能是相同的(当节点为黑色且具有红色子节点时)。

      因此,内部节点的数量得到了一个没有实际高的下限,因此最大高度(由此得出)也没有实际低。

    2. 它没有使用黑红树必须遵守的所有约束。

      确实使用了根是黑色的属性,红色节点不能有红色的孩子,因此“至少有一半的节点在从根到叶的任何路径上都是黑色的”

      但是......它没有考虑到从根到任何叶子的路径都必须具有相同数量的黑色节点的限制。

      这个约束对树的可能高度施加了额外的限制,这个证明忽略了。

    然而,证明的目标不是要有一个尽可能严格的上限,而是要有一个足以得出结论 h(root) = O(log(n))

    【讨论】:

      猜你喜欢
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 2013-12-08
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 2014-03-16
      相关资源
      最近更新 更多