【问题标题】:How to tell if a binary tree is red-black balanced?如何判断二叉树是否红黑平衡?
【发布时间】:2015-07-21 11:07:33
【问题描述】:

在过去的一次考试中,我们曾经被要求通过观察树的形状来判断一棵树是否是红黑平衡的。我还没有找到任何关于如何做到这一点的信息,除了一个观点声称如果最长路径不超过最短路径的两倍,二叉树是红黑平衡的,但我很确定这是 null 的要求路径平衡树也是如此。那是对的吗?有什么方法可以判断一棵树的形状是否是红黑平衡的?

【问题讨论】:

    标签: binary-tree


    【解决方案1】:

    要检查二叉树是否是红黑树平衡的,您应该验证每个子树的最大高度小于或等于最小高度的两倍

    更多信息:

    check given binary tree follows height property red black tree

    【讨论】:

      【解决方案2】:

      不要混淆。可能教授希望学生们了解红黑树的样子。

      从维基百科,你有:

      除了对二叉搜索树施加的要求之外,红黑树还必须满足以下要求:

      1. 节点不是红色就是黑色。
      2. 根是黑色的。
      3. 所有叶子 (NIL) 都是黑色的。(所有叶子都与根的颜色相同。)
      4. 每个红色节点必须有两个黑色子节点(因此它 必须有一个黑人父母)。
      5. 从给定节点到其任何后代 NIL 节点的每条路径 包含相同数量的黑色节点。

      这些约束强化了红黑树的一个关键特性:从根到最远叶子的路径不超过从根到最近叶子的路径的两倍 em>。结果是树的高度大致平衡。由于诸如插入、删除和查找值之类的操作需要与树的高度成比例的最坏情况时间,因此这个高度的理论上限允许红黑树在最坏情况下是有效的,这与普通的二叉搜索树不同。

      Source

      那么就有这个问题了:Colour a binary tree to be a red-black tree

      还有这个:How to check the black-height of a node for all paths to its descendent leaves?,您可以在其中找到适合您问题的算法。

      以这棵树为例:

      如果测试有一个彩色树,那么您可以断言从 Wikipedia 给出的属性。如果树没有颜色,我认为是这种情况,然后拿我上面链接的树,把它写在一张纸上,然后运行链接问题中提供的算法。

      【讨论】:

        【解决方案3】:

        我不是大师,但这是来自 Cormen 的书Introduction to Algorithms

        红黑树是满足以下红黑性质的二叉树:

        1. 每个节点不是红色就是黑色。
        2. 根是黑色的。
        3. 每片叶子 (NIL) 都是黑色的。
        4. 如果一个节点是红色的,那么它的两个子节点都是黑色的。
        5. 对于每个节点,从节点到后代叶子的所有简单路径都包含相同数量的黑色节点。

        【讨论】:

          猜你喜欢
          • 2010-10-19
          • 2015-04-16
          • 2018-06-30
          • 1970-01-01
          • 2015-08-10
          • 1970-01-01
          • 1970-01-01
          • 2018-06-30
          相关资源
          最近更新 更多