这是序列20,10,5,30,40,57,3,2,4,35,25,18,22,27 我已经尝试过将每个新插入的节点作为根,但它不起作用。 谁能给我一步一步的解释?
答案 0 :(得分:0)
自下而上的splaying从新插入的节点 x 开始,并执行zig / zag操作直到达到root。伪代码是
splay_up(x)
while p(x) != null
if x = c_l(p(x))
if p(p(x)) = null // zig
rotate_right(p(x))
elif p(x) = c_l(p(p(x))) // zig-zig
rotate_right(p(p(x)))
rotate_right(p(x))
elif p(x) = c_r(p(p(x))) // zig-zag
rotate_right(p(x))
rotate_left(p(x))
elif x = c_r(p(x))
if p(p(x)) = null // zig
rotate_left(p(x))
elif p(x) = c_r(p(p(x))) // zig-zig
rotate_left(p(p(x)))
rotate_left(p(x))
elif p(x) = c_l(p(p(x))) zig-zag
rotate_left(p(x))
rotate_right(p(x))
其中p(x)
是 x 的父级,c_l(x)
是 x 的子级,c_r(x)
是 x ,树旋转照常进行。