假设我有一个二叉搜索树,最初满足所有red-black conditions并且在某些集合 S 中包含每个整数 s 的一个节点。接下来,我想要一个新节点;说 a (不在 S 中)。
重新平衡后,此添加的结果是唯一的吗?
换句话说:插入节点后,只有一种方法可以重新平衡红黑树吗?
我相信它们并不是独一无二的,尽管我没有提供任何证据(而且信心不足)。我只是想知道一个比我更了解情况的人是否会如此善良以至于能够启发我?
答案 0 :(得分:7)
它们不是唯一的。
一个简单的证据就是做一个简单的算法更改,例如检查我们是否可以更改根的颜色,并提供一个仍然有效的情况,例如:
1-B
/ \
0-R 2-R
add(3):
1-B
/ \
0-B 2-B
\
3-R
但新算法可以很容易地产生
1-R
/ \
0-B 2-B
\
3-R
根是不同的颜色,但当然树木仍然是有效的RB树。
这可能看起来有点微不足道,但你可以扩展这个想法(如果你想要一个不那么微不足道的证据)来检查不仅仅是根。您可以检查O(1)级别以进行非平凡但有效的更改,这将生成具有相同运行时间的两种不同算法。
例如,检查前10行是否为黑色,并将奇数行更改为红色,将产生额外的常量工作(即O(1))和新算法。
我应该注意,这只是非唯一性的证明,而不是非唯一性的限制。即像这样微不足道的东西足以证明这一点,但它为RB算法打开了大门,这些算法在更基本的方面有所不同。
答案 1 :(得分:2)
没有多种算法。
让我们从这两个命题开始:
现在,假设有一个独特的算法将节点添加到4个内部节点的红黑树。然后应该只有3个红黑树,有5个内部节点,因为算法会产生一个结果。
这是荒谬的,因为有5个内部节点的红黑树的数量是8。
(cf PIGEONHOLE PRINCIPLE)
因此有多个“红黑”算法
希望我理解你的意思。