如何判断红黑树是否可以有X黑节点和Y红节点

时间:2010-10-10 00:54:35

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

我下周将参加考试算法考试,并为此做准备。其中一个问题让我很难过。

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

听起来很快就可以回答,但我无法理解它。

CRLS给出了具有n个内部节点的RB树的最大高度:2 * lg(n + 1)。

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

任何提示?

3 个答案:

答案 0 :(得分:1)

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

  1. 节点为红色或黑色。
  2. 根是黑色的。 (此规则有时会从其他定义中省略。由于根始终可以从红色变为黑色,但反之亦然,因此该规则对分析几乎没有影响。)
  3. 所有叶子都是黑色的。
  4. 每个红色节点的两个孩子都是黑色的。
  5. 从给定节点到其任何后代叶子的每个简单路径都包含相同数量的黑色节点。
  6. (从维基百科页面中窃取这些内容:http://en.wikipedia.org/wiki/Red-black_tree

    根据您列出的节点数量,您是否可以满足所有这些属性?

答案 1 :(得分:1)

答案很简单。

我们知道红色节点只能有黑色父节点。节点将是每个黑色节点的两个子节点都是红色的,因此,每个黑色节点都有红色父节点。因此,对于'n'黑节点'2n'红色节点是可能的。

这样想:

  1. 放置第一个节点(root)&使它成为黑色
  2. 让他们的孩子都红了
  3. 使这两个红色节点的左右儿童都为黑色,以及所有这些黑色节点,
  4. 按照与root相同的步骤进行操作,直到黑色节点数达到给定值(在本例中为7)
  5. 希望这有助于您查看解决方案。

答案 2 :(得分:0)

答案关键取决于您的RB树是否在叶子上使用黑色虚拟节点,如果是,则它们包含在七个黑色节点的计数中。如果没有,请考虑一个包含七个黑节点的完整树

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

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