我正在阅读Mark Allen Wesis的数据结构和算法中的splay树
除了我们之外,推广策略类似于轮换理念 对旋转的执行方式有一点选择性。我们会 仍沿着访问路径向下旋转。设x为(非根) 我们正在旋转的访问路径上的节点。如果是x的父级 是树的根,我们只是旋转x和根。这是 沿访问路径的最后一次旋转。否则,x同时具有父级 (p)和祖父母(g),有两种情况,加上对称性, 考虑一下。第一种情况是锯齿形情况,这里x是右边 孩子和p是左孩子(反之亦然)。如果是这种情况,我们 执行双旋转,就像AVL双旋转一样。 否则,我们有一个zig-zig情况:x和p都是左边的 孩子或两个合适的孩子。
在上面的文字中,作者的意思是通过以下陈述“有两种情况加上对称性”?给出了两个案例,但这里有什么对称?
谢谢!
答案 0 :(得分:2)
我认为这只是非常基本的轴向对称:
zig zag案例,这里有两个对称树:
g
/ \
p d
/\
c x
/ \
a b
g
/ \
d p
/\
x c
/ \
a b
答案 1 :(得分:0)
例如,假设一个案例是“当问题中的节点是其父节点的右子节点而父节点是祖父母的左子节点时”在这种情况下,您执行左旋转然后右旋转。所以节点将出现在祖父母身上。
这种情况的对称部分是“当问题中的节点是其父节点的左子节点而父节点是祖父母的右子节点时”在这种情况下,您执行右旋转然后左旋转。所以节点将出现在祖父母身上。
用左右替换左,你得到对称的情况。
在展开树中只有3种旋转情况。列出它here 您可以在使用和不使用splaying的情况下查看运行时的差异。