1. 程式人生 > >簡單理解樹的旋轉

簡單理解樹的旋轉

這一 四種 info spl 二叉 技術分享 轉發 bubuko 排序

網上的資料雜亂,樹的旋轉本來簡單易懂但被寫的很麻煩

請不要死記,沒有意義

首先我們要明白一些原則:

旋轉是以三個節點和這三個節點的子樹為操作對象的

旋轉會有一個旋轉中心,就是位於三個節點中間的那個節點

旋轉的意義不在於旋轉或者考倒大家,而是通過旋轉使得二叉排序樹趨近平衡,然後由此引出的單旋轉和雙旋轉,最終的目的就是為了使得結構趨於平衡

樹的旋轉發生的情況總共四種:

左左,右右

技術分享圖片

技術分享圖片

左右,右左

技術分享圖片

技術分享圖片

三角形代表一棵子樹,可以為空

由於是對稱的兩組,另外一組花的要假一點

實際還可以扯出一種情況,就是平衡狀態,這種狀態不需要旋轉

旋轉只分兩種

:左旋轉和右旋轉

技術分享圖片

技術分享圖片

然後,可以通過一次或多次旋轉可以使得四種情況相互轉化

證明:

由上面的圖片2可以看出,左右,左右通過一次旋轉可以轉化為左左,右右的情況

然後由圖一不難看出,左左,右右都可以通過一次旋轉變為近似平衡的結構,也就是旋轉通常要達到的目標情況,如果以這一情況為中轉,則可以實現左左,右右的轉化

加上旋轉可逆,也就是可以還原,顯然幾種情況是能相互轉換的

也就是:

左右>左左>平衡>右右>右左

右左>右右>平衡>左左>左右

旋轉的最終目的,是使得各種二叉排序樹(AVG,Splay,Treap等等)趨緊於平衡狀態

單旋轉:

技術分享圖片

雙旋轉:

簡單理解樹的旋轉