红黑树的最大高度为2log(n + 1),因此如果节点数为15,则最大高度应为2log(16)或8.我一直试图绘制一个红色黑树,高度为8,同时只使用15个节点,但我无法在不违反红黑树规则的情况下这样做。如何使用15个节点创建高度为8的红黑树?
答案 0 :(得分: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)
产生的高度降低并满足所有要求。
答案 1 :(得分:0)
h(root)≤2·log 2 (n + 1)的proof不会产生< em> tight 上限:
它假定节点的子代的“黑色高度”比节点本身的小。这是一个简化,因为它很可能是相同的(当节点为黑色且有红色子节点时)。
结果,内部节点的数量已达到一个下限,该上限不如现实中的那么高,因此最大高度(从中得出)不如实际中的那么低。
它没有使用黑红色树必须遵守的所有约束。
它 确实 使用以下属性:根是黑色的,并且红色节点不能有红色子节点,因此”至少有一半节点从根到叶的任何路径上都是黑色的”。
但是... 不是 要考虑到从根到任何叶子的路径都必须具有相同数量的黑色节点的限制。
此约束对树的可能高度设置了附加限制,该证据将忽略该高度。
但是,证明的目的不是要有一个尽可能严格的上限,而是要有一个足以推断出 h(root)= O(log(n))的上限。