微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在红黑树旋转时,是否保留了所有节点的黑色高度?

如何解决在红黑树旋转时,是否保留了所有节点的黑色高度?

我在考试中被问到这个问题,但我对老师的回答并不十分信服,我想请问您对此有何看法。

红黑树上的旋转...

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

以上说法正确的是:

A. (1) 单独
B. (2) 单独
C. (1) 和 (2)
D.既不是 (1) 也不是 (2)。

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

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

解决方法

你的老师是对的。在 Wikipedia 上,我们在“插入案例 5”中找到了一个轮换示例:

enter image description here

左侧是一个简单的变体,右侧是一个更复杂的案例。

第二行显示旋转的结果。很明显,当黑色根移动到右子树时,左子树中的节点在其路径上丢失了一个黑色节点,因此存在黑色违规。

注意这样的旋转之后,通常有一种方法可以改变一个或多个节点的颜色来解决黑色冲突。这就是图像底行中的图片。但是这个动作不是轮换的一部分。

,

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

通常

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

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

修复红黑树的完整不变量集只是修复的最后一部分,任何在途中的部分修复可能仍会使树需要进一步修复,直到违规违规得到解决。

> ,

This is the image received

非常感谢您的回复。通过查看提供的材料,更容易理解并得出结论,这不是旋转的一部分,但是,通过查看所附图片,您不能真正说旋转时未保留黑色高度,这就是我们有作为基础。我相信问题出在所提供的材料上,正如您所看到的那样不清楚。但我确实明白为什么颜色平衡不包括在旋转中。

无论如何,在插入和删除过程中保持平衡条件。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。