紅黑樹-RBT(二、基本操作之左旋)
阿新 • • 發佈:2018-02-10
都是 spa 左旋 class body 節點 圖片 如果 info
一、左旋
1、當在含有n個關鍵字的紅黑樹上運行時,TREE-INSERT和TREE-DELETE操作對樹作了修改,結果可能違反(一、紅黑樹--》2、定義)中給出的紅黑樹的性質,為了保持這些性質,就要改變樹中的某些節點的顏色以及指針結構。
對x進行左旋,意味著"將x變成一個左節點"。左旋以x到y之間的鏈為“支軸”進行。它使y成為該子樹新的根,x成為y的左孩子,y的左孩子成為x的右孩子。
2、偽代碼:在LEFT-ROTATE得偽代碼中,假設right[x]!=nil[T]
1 LEFT-ROTATE(T, x) 2 y ← right[x] // 前提:這裏假設x的右孩子為y。下面開始正式操作3 right[x] ← left[y] // 將 “y的左孩子” 設為 “x的右孩子”,即 將β設為x的右孩子 4 p[left[y]] ← x // 將 “x” 設為 “y的左孩子的父親”,即 將β的父親設為x 5 p[y] ← p[x] // 將 “x的父親” 設為 “y的父親” 6 if p[x] = nil[T] 7 then root[T] ← y // 情況1:如果 “x的父親” 是空節點,則將y設為根節點 8 else if x = left[p[x]] 9 then left[p[x]] ← y //情況2:如果 x是它父節點的左孩子,則將y設為“x的父節點的左孩子” 10 else right[p[x]] ← y // 情況3:(x是它父節點的右孩子) 將y設為“x的父節點的右孩子” 11 left[y] ← x // 將 “x” 設為 “y的左孩子” 12 p[x] ← y // 將 “x的父節點” 設為 “y”
3、Right-ROTATE與LEFT-ROTATE的程序是對稱的。他們都是在O(1)時間內執行的。旋轉只有指針被改變;而節點中所有其他域都保持不變。
紅黑樹-RBT(二、基本操作之左旋)