【发布时间】:2011-03-27 23:23:05
【问题描述】:
伙计们,我正在尝试为红黑树实现删除算法,但我在理解该算法的第三行时遇到问题(来自“算法简介”第二版一书):
1 如果 left[z] = nil[T] 或 right[z] = nil[T]
2 然后 y ← z
3 else y ← TREE-SUCCESSOR(z)
4 如果 left[y] ≠ nil[T]
5 然后 x ← 左[y]
6 else x ← right[y]
7 p[x] ← p[y]
8 如果 p[y] = nil[T]
9 然后根[T] ← x
10 else if y = left[p[y]]
11 然后左[p[y]] ← x
12 否则对[p[y]] ← x
13 如果 y 3≠ z
14 然后键[z] ← 键[y]
15 将y的卫星数据复制到z
16 如果颜色[y] = 黑色
17 然后 RB-DELETE-FIXUP(T, x)
18返回y
首先,这本书中没有任何地方解释了 TREE-SUCCESSOR 应该是什么样子(没有算法),但我找到了this page:如果我用 11、2、1、7 输入这个算法,5,8,14,15,4 然后尝试删除 7 它会找到 predecessor 但如果我尝试删除 11 它会找到 successor。那是我无法理解的。为什么有时需要前任,有时需要继任者?做出此决定时考虑了哪些标准?节点的颜色?
谢谢。
附:我也不太明白第 13 行写了什么。这是否意味着如果 y 具有三种颜色(既不是黑色也不是红色)或其他颜色?
【问题讨论】:
标签: red-black-tree