cin*_*ndy 6 algorithm red-black-tree data-structures
LEFT-ROTATE(T, x)
y = x.right # Line 1
x.right = y.left # Line 2
if y.left ? T.nil # Line 3
y.left.p = x # Line 4
y.p = x.p
if x.p == T.nil
T.root = y
elseif x == x.p.left
x.p.left = y
else x.p.right = y
y.left = x
x.p = y
Run Code Online (Sandbox Code Playgroud)
其中.left,.right,.p属性分别与其左,右子级及其父级相对应。T是树。
我的主要问题在于第3行和第4行:
为什么我需要第3行的if条件?这本书说NIL实际上是红黑树的叶子,因此我认为NIL也可以有父指针。这些代码在没有第3行的情况下仍然可以使用。
通过1号线和2号线,我可以将4号线写为x.right.p = x吗?如果它们实际上是相同的,那么作者是否有理由选择将其写为y.left.p = x?
我的直觉是x.right.p = x与y.left.p = x。但是,我对此找不到很好的解释。我已经检查了指针的定义,但是在谷歌搜索很多之后,它仍然很令人困惑。