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

Tree 在红黑树旋转中,是否保留所有节点的黑色高度?,tree,binary-tree,binary-search-tree,red-black-tree,red-black-tree-insertion,Tree,Binary Tree,Binary Search Tree,Red Black Tree,Red Black Tree Insertion,我是在一次考试中被问到这个问题的,但我对教授的答案并不确信,我想问你对此有何看法 这个问题是关于我们在红黑树上做的旋转 (1) 。它保留所有节点的黑色高度。 (2). 它保持有序。 (A) (1)单独(B)(2)单独(C)(1)和(2)(D)都不是(1)或(2) 对于教授来说,旋转时它不保持黑色的高度,答案是B,它只保持顺序。然而,我坚信它保留了所有节点的黑色高度,答案是C,而不是A。你们怎么想,为什么 提前谢谢。你的老师是对的。在上,我们在“插入案例5”中找到了一个旋转示例: 左侧是一个简单

我是在一次考试中被问到这个问题的,但我对教授的答案并不确信,我想问你对此有何看法

这个问题是关于我们在红黑树上做的旋转

(1) 。它保留所有节点的黑色高度。 (2). 它保持有序。 (A) (1)单独(B)(2)单独(C)(1)和(2)(D)都不是(1)或(2)

对于教授来说,旋转时它不保持黑色的高度,答案是B,它只保持顺序。然而,我坚信它保留了所有节点的黑色高度,答案是C,而不是A。你们怎么想,为什么

提前谢谢。

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

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

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


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

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

典型的

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

因此,任何修正都是在树的根方向上的节点上进行的,并且可能存在 O((log2(h/2))再浓缩,插入物最多旋转2圈 O(log2(h))回收和最多3次循环删除

修复的最后一部分是恢复红黑树的全套不变量,任何正在进行的部分修复都可能会使树需要进一步修复,直到违规行为得到解决。

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

无论如何,在插入和删除过程中保持平衡状态