我在一次考试中被问到了这个问题,但我对老师的回答不太信服,我想问你对此有什么看法。
红黑树上的旋转……
以上哪些陈述是正确的:
老师声称旋转不会保留黑色高度,答案是B:它只保留顺序。然而,我坚信它保留了所有节点的黑色高度,答案是C,而不是B。
我是对的还是我的老师是对的?
你的老师是对的。在维基百科上,我们在“插入案例5”中找到了一个旋转示例:
左边是一个简单的变体,右边是一个更复杂的情况。
第二行显示了旋转的结果。很明显,随着黑色根移动到右侧子树,左侧子树中的节点在它们的路径上失去了一个黑色节点,因此存在黑色违例。
注意,在这种旋转之后,通常有一种方法可以更改一个或多个节点的颜色以解决黑色违规。这是图片底部一行的图片。但这一行动不是轮换的一部分。
我同意你的教授。我不同意你关于所有节点都保留黑色高度的观点,因为旋转(以及节点重新着色是设计用于恢复红黑属性的操作组的一部分)
代表性地
红黑树插入违反了没有连续2个红色节点的属性。红黑树删除违反了从根开始的所有黑树高度相同的属性。
因此,任何修正都是在树的根方向的节点上完成的,并且可能有O((log2(h /2))次重新着色,并且对于插入O(log2(h))次重新着色,最多旋转2次,对于删除,最多旋转3次
这只是修复的最后一部分,它恢复了红黑树的完整不变量集,而任何正在进行的部分修复都可能会使树需要进一步修复,直到违规问题得到解决。
这是收到的图像
非常感谢回复。通过查看提供的材料,更容易理解并得出结论,这不是旋转的一部分,然而,通过查看所附的图片,你不能真的说黑色高度在旋转中没有保留,这是我们的基础。我认为问题出在提供的材料上,正如你所看到的,这些材料并不清楚。但是我明白为什么色彩的平衡不包括在旋转中。
无论如何,在插入和删除期间保持平衡条件。