这是一个测验问题。我不确定我的答案是否正确。请帮帮我。
让我们说高度为h,因为没有两个连续的节点(当我们上树时)可以是红色,红色节点的最大数量不是h / 2吗? (h = log n)
不知何故,我觉得这不是正确的答案。
任何帮助/输入将不胜感激!
提前非常感谢你!
答案 0 :(得分:0)
**编辑**这个答案假定高度的定义是从根到叶子的最长路径中的节点数(例如,在lecture notes here中使用),包括"虚拟&#34 ;黑叶节点。更常见的定义计算边数,并且不包括叶节点。使用此定义,答案为round(h/2)
,如果将叶节点包含在高度round_down(h/2)
中。 **编辑结束**
如果您按照Wikipedia中的根节点为黑色的规则,则正确答案是小于h / 2的最大整数。这只是因为根和叶是黑色的,并且其间的一半节点(向上舍入)可以是红色的。即round((h-2)/2)
你也可以通过考虑一些不同高度的小红黑树来找到规则。
案例h=1
根是黑色的 - > 0个红色节点
案例' h = 2'根是黑色的,叶子是黑色的 - > 0个红色节点
案例h=3
根是黑色,第二级可以是红色,而树叶必须是黑色 - >最多1个红色节点
案例h=4
根是黑色,第二级可以是红色,第三级必须是黑色,而叶子必须是黑色 - >最多1个红色节点
案例h=5
黑色,红色,黑色,红色,黑色 - >最多2个红色节点。
作为h
函数的n
比较棘手,但可以显示h <= 2 log (n+1)
,它可以保证对数搜索时间。有关证明,请参阅Searching and Search Trees II (page 11)。证明基于以下事实:红黑树的规则保证从x
开始的子树包含至少2^(bh(x)) - 1
个内部节点,其中bh(x)
是黑色高度 - 数量为从根到叶的路径中的黑色节点。这通过归纳证明了。然后通过注意到最多一半的节点是黑色的(我们说的是子树,因此根可以是红色的)bh(x) >= h/2
。现在使用这些结果我们得到n >= 2^bh(x) - 1 >= 2^(h/2) -1
。求解h
,我们得到答案h <= 2 log(n+1)
。
由于问题是测验,因此h
与log(n)
或log(n)
成正比应该足够了。
答案 1 :(得分:0)
让我们首先看看有多少节点(最小化 n )来制作一个带有1个红色节点的路径(*
为黑色):
*
/ \
* R
/ \
* *
当需要1个红色节点时, n 必须至少为5。它有3个叶子节点和2个内部节点。删除任何节点都需要删除红色节点以保持在the rules范围内。
如果我们想要扩展此树以获得具有2个红色节点的路径,我们可以应用以下两个步骤:
美元符号是与普遍树相比增加的黑色节点:
*
/ \
* R
/| / \
$ $ * *
/| / \
$ $ $ R
/ \
$ $
我们选择在右侧放置红色节点的路径;这种选择不会影响结论。请注意,在其他较短路径中添加红色节点没有帮助,因为这样只会增加节点数量而不会增加最多红色节点的路径。
叶节点数(L)在步骤1中翻倍,而叶子节点成为内部节点(I)。 第二步增加了内部节点的数量和叶子数量1.更正式地说,我们可以找到这些公式,其中索引 r 表示红色节点的数量:
L 1 = 3
我 1 = 2
L r + 1 = 2L r + 1
I r + 1 = I r + L r + 1
放入表格以增加 r :
r | L | I | n=L+I
----+-----+-----+-------
1 | 3 | 2 | 5
2 | 7 | 6 | 13
3 | 15 | 14 | 29
4 | 31 | 30 | 61
... | ... | ... | ...
我们可以看到以下情况:
L r = 2 r + 1 - 1
I r = 2 r + 1 - 2
所以:
n r = 2 r + 2 - 3
因此,我们有一个公式,用于了解具有 r 红色节点的路径所需的最小节点数。我们需要一个不同的关系:给定 n 时 r 的最大值。
从上面我们可以推导出:
r =⌊log 2 (n + 3)⌋ - 2