如何从以下顺序创建自下而上的展开树

时间:2015-12-26 14:55:16

标签: data-structures tree-balancing splay-tree tree-rotation

这是序列20,10,5,30,40,57,3,2,4,35,25,18,22,27 我已经尝试过将每个新插入的节点作为根,但它不起作用。 谁能给我一步一步的解释?

1 个答案:

答案 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 ,树旋转照常进行。

在你的情况下,对于前七个数字,它会像附加的“图表”一样:enter image description here