提问者:小点点

在红黑树旋转上,所有节点的黑高都保留了吗?


我在一次考试中被问到了这个问题,但我对老师的回答不太信服,我想问你对此有什么看法。

红黑树上的旋转……

  1. 保留所有节点的黑色高度。
  2. 保留顺序排序。

以上哪些陈述是正确的:

老师声称旋转不会保留黑色高度,答案是B:它只保留顺序。然而,我坚信它保留了所有节点的黑色高度,答案是C,而不是B。

我是对的还是我的老师是对的?


共3个答案

匿名用户

你的老师是对的。在维基百科上,我们在“插入案例5”中找到了一个旋转示例:

左边是一个简单的变体,右边是一个更复杂的情况。

第二行显示了旋转的结果。很明显,随着黑色根移动到右侧子树,左侧子树中的节点在它们的路径上失去了一个黑色节点,因此存在黑色违例。

注意,在这种旋转之后,通常有一种方法可以更改一个或多个节点的颜色以解决黑色违规。这是图片底部一行的图片。但这一行动不是轮换的一部分。

匿名用户

我同意你的教授。我不同意你关于所有节点都保留黑色高度的观点,因为旋转(以及节点重新着色是设计用于恢复红黑属性的操作组的一部分)

代表性地

红黑树插入违反了没有连续2个红色节点的属性。红黑树删除违反了从根开始的所有黑树高度相同的属性。

因此,任何修正都是在树的根方向的节点上完成的,并且可能有O((log2(h /2))次重新着色,并且对于插入O(log2(h))次重新着色,最多旋转2次,对于删除,最多旋转3次

这只是修复的最后一部分,它恢复了红黑树的完整不变量集,而任何正在进行的部分修复都可能会使树需要进一步修复,直到违规问题得到解决。

匿名用户

这是收到的图像

非常感谢回复。通过查看提供的材料,更容易理解并得出结论,这不是旋转的一部分,然而,通过查看所附的图片,你不能真的说黑色高度在旋转中没有保留,这是我们的基础。我认为问题出在提供的材料上,正如你所看到的,这些材料并不清楚。但是我明白为什么色彩的平衡不包括在旋转中。

无论如何,在插入和删除期间保持平衡条件。