關於樹(平衡樹)的旋轉--理解方便記憶


對於平衡樹爲了保持它的特性,我們經常會做旋轉操作(左旋,右旋,左右雙旋,右左雙旋)。這個本來是一個很基礎的東西,一直也沒放在心上,但經常一說起來卻忘了具體是怎麼操作的,於是寫下一點理解幫助記憶。(歡迎討論,尤其是理解有誤的歡迎指正。)


自下向上地,在節點平衡因子(假設爲 A 吧) |A| >= 2 (一般就等於2了)時就需要旋轉,把這節點及以下看成獨立的樹也就可以將這節點看作根節點。A>0時向右找,A<0時向左找,遇到的下一個節點A‘(很明顯|A‘|<=1)

  1. 與A同號時則需要單旋,就選它做根節點。原根節點X將作爲一個子樹,然後將原來A'這邊的子樹(樹1吧)接到X上,將另一邊子樹(樹2吧)留着繼續作爲A’的子樹。因爲它是處在高度(假設爲H)高的那一邊(比另一邊至少高2,也就是另一邊最多爲H-2),向上移動使得這一段高度減一爲H-1,另一邊加1從而最多爲H-1,又|A'|=1,所以另一邊至少也爲H-1,即就爲H-1,,則移動後平衡因子變爲0;
  2. 與A異號時則需要雙旋,繼續根據符號左右走,遇到的第一個平衡因子爲0的節點作爲根節點。原根節點X將作爲一個子樹,然後將原來A'這邊的子樹(樹1吧)接到X上,將另一邊子樹(樹2吧)接到父節點上代替原來A'的位置。
  3. 等於0的話需要雙旋(類似2),當然就是它本身作爲根節點了。原根節點X將作爲一個子樹,然後將原來A'這邊的子樹(樹1吧)接到X上,將另一邊子樹(樹2吧)留着繼續作爲A’的子樹。

發佈了26 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章