2015-12-26 56 views

回答

0

從一個新插入的節點x開始自下而上的splaying並執行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