【问题标题】:How to tell whether a red-black tree can have X black nodes and Y red nodes or not如何判断红黑树是否可以有 X 个黑色节点和 Y 个红色节点
【发布时间】:2011-04-23 08:21:15
【问题描述】:

我下周要参加算法考试,并被要求准备考试。其中一个问题让我很困惑。

“我们可以画一棵有7个黑色节点和10个红色节点的红黑树吗?为什么?”

听起来可以很快回答,但我想不通。

CRLS 为我们提供了具有 n 个内部节点的 RB 树的最大高度:2*lg(n+1)。

我认为这个问题可以单独使用这个引理来解决,但我不确定。

有什么建议吗?

【问题讨论】:

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


    【解决方案1】:

    答案很简单。

    正如我们所知,红色节点只能有黑色父节点。最大节点数。节点数将是每个黑色节点的两个子节点都是红色的,因此每个黑色节点都有红色的父节点。因此,对于“n”个黑色节点,“2n”个红色节点是可能的。

    这样想:

    1. 放置第一个节点(根节点)并将其设为黑色
    2. 把它的两个孩子都变成红色
    3. 将这两个红色节点的左右子节点设为黑色,并为所有这些黑色节点设置,
    4. 遵循与 root 相同的过程,直到黑色节点计数达到给定值(在本例中为 7)

    希望这能帮助您形象化解决方案。

    【讨论】:

      【解决方案2】:

      答案主要取决于您的 RB 树是否在叶子上使用黑色虚拟节点,如果是,它们将包含在七个黑色节点的计数中。如果不是,请考虑一棵由七个黑色节点组成的完整树

              *
             / \
            *   *
           /\   /\
          *  * *  *
      

      添加十个红色节点不会有太多麻烦。

      【讨论】:

        【解决方案3】:

        由于这是考试准备,我不想给你一个直接的答案,但我认为你需要考虑的是控制你如何构建红黑树的属性:

        1. 节点不是红色就是黑色。
        2. 根是黑色的。 (此规则有时会从其他定义中省略。由于根始终可以从红色变为黑色,但不一定相反,此规则对分析几乎没有影响。)
        3. 所有叶子都是黑色的。
        4. 每个红色节点的两个子节点都是黑色的。
        5. 从给定节点到其任何后代叶子的每条简单路径都包含相同数量的黑色节点。

        (从维基百科页面窃取这些:http://en.wikipedia.org/wiki/Red-black_tree

        鉴于您列出的节点数,您能满足所有这些属性吗?

        【讨论】:

          猜你喜欢
          • 2022-12-10
          • 1970-01-01
          • 2014-01-13
          • 2011-09-18
          • 2022-10-13
          • 2020-11-29
          • 2017-03-02
          • 1970-01-01
          • 2019-07-26
          相关资源
          最近更新 更多