Data structures 如何根据以下顺序创建自底向上的splay树

Data structures 如何根据以下顺序创建自底向上的splay树,data-structures,tree-balancing,splay-tree,tree-rotation,Data Structures,Tree Balancing,Splay Tree,Tree Rotation,这是序列20,10,5,30,40,57,3,2,4,35,25,18,22,27 我尝试过将每个新插入的节点作为根节点,但它不起作用。 有人能给我一步一步的解释吗 自底向上展开从新插入的节点x开始,并执行之字形/之字形操作,直到到达根节点。伪代码是 splay_up(x) while p(x) != null if x = c_l(p(x)) if p(p(x)) = null // zig rotate_right(p(x))

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

自底向上展开从新插入的节点x开始,并执行之字形/之字形操作,直到到达根节点。伪代码是

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的右子级时,树的旋转通常进行

在您的情况下,对于前七个数字,它将如所附的“图表”所示: