日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

AVL树的单双旋转解析

發布時間:2023/12/3 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AVL树的单双旋转解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【0】README

0.0) 本文部分idea 轉自:http://blog.csdn.net/collonn/article/details/20128205
0.1) 本文專注于 解析 AVL 樹的 單旋轉(左左單旋轉和右右單旋轉) 和 雙旋轉(左右雙旋轉和右左單旋轉)的內部核心技巧(歷時一天吧,估計);
0.2) 不得不提的是, 旋轉有兩個屬性: 軸 和 旋轉方向;
0.3) 20160127 last updating: 旋轉軸的確定 : (干貨——單雙旋轉的旋轉軸確定 問題)

  • 0.3.1)單旋轉:旋轉軸為 不滿足AVL條件的最小樹的樹根的相應孩子節點
  • 0.3.2)多旋轉:旋轉軸為 不滿足AVL條件的最小樹的樹根的相應孫子節點
  • 0.3.3) for updated source code , please visit https://github.com/pacosonTang/dataStructure-algorithmAnalysis/tree/master/chapter4/p80_AVL_last

0.4) for basic AVL info , please visit http://blog.csdn.net/PacosonSWJTU/article/details/49365415


【1】 如何判斷進行單旋轉還是雙旋轉 (干貨——什么時候需要單選擇,而什么時候需要多旋轉?)

1.1)單旋轉: 插入點不介于 不滿足AVL條件的樹根 和 樹根對應孩子節點之間;
1.2)雙旋轉:插入點介于 不滿足AVL條件的樹根 和 樹根對應孩子節點之間;


【2】單旋轉

2.1)左左旋轉(順時針旋轉): 從插入點回溯到第一個不滿足AVL條件的節點;本例中,插入點是10, 而第一個不滿足AVL條件的節點是30;將回溯路徑上的節點除節點30外,上移一層,節點30下移一層;

  • case1)
(這是一個左右雙旋轉特例,當不符合AVL條件的樹根和插入點的父節點只有一個子節點,且相反方向的子節點,當然了,插入點要介于樹根和插入點父節點之間的話,才滿足 雙旋轉特例的條件)

Attention)

  • A1)因為10 小于 20 且 小于30; 所以通過一次單旋轉就可以完成;
    (干貨:也即是, 左左單旋轉時, 不滿足AVL條件的最小樹的根應該下移,該樹的其他節點上移,而不管 該樹的左子樹的右孩子 或者存在 或者 不存在,在旋轉過程中,都要把該左子樹的的右孩子添加以作為最小樹根的左孩子,因為即使不存在,添加null 也不影響最后的旋轉效果)

  • case2)

2.2)右右旋轉(逆時針旋轉): 從插入點回溯到第一個不滿足AVL條件的節點;本例中,插入點是10, 而第一個不滿足AVL條件的節點是30;將回溯路徑上的節點除節點30外,上移一層,節點30下移一層;

  • case1

    (這是一個右左雙旋轉特例,當不符合AVL條件的樹根和插入點的父節點只有一個子節點,且相反方向的子節點,當然了,插入點要介于樹根和插入點父節點之間的話,才滿足 雙旋轉特例的條件)

Attention)

  • A1)因為10 小于 20 且 小于30; 所以通過一次單旋轉就可以完成;
    (干貨:也即是, 右右單旋轉時, 不滿足AVL條件的最小樹的根應該下移,該樹的其他節點上移,而不管 該樹的右子樹的左孩子 或者存在 或者 不存在,在旋轉過程中,都要把該右子樹的左孩子添加以作為最小樹根的右孩子,因為即使不存在,添加null 也不影響最后的 旋轉效果)

  • case2)

  • case3)為什么經過右右單旋轉就可以修正成為 AVL 樹;因為 new point = 13 不在 4 和 7 之間, 所以一次單旋轉就可以了,無需雙旋轉;
    (干貨——也就是說,new point 介于 不滿足AVL條件的樹根 和 其 孩子 之間的話,那么就需要雙旋轉, 否則, 只需要 單旋轉就可以了)

Conclusion of single rotation)單旋轉有兩個屬性: 軸 和 旋轉方向

  • C1)單旋轉的軸: 相信你也看到了, 單旋轉的軸顯然是不符合AVL條件的樹根的直接孩子;

    • C1.1)左左單旋轉的軸:是不符合AVL條件的樹根的左孩子;
    • C1.2)右右單旋轉的軸:是不符合AVL條件的樹根的右孩子;
  • C2)旋轉方向:

    • C2.1)左左單旋轉方向:順時針方向;
    • C2.2)右右單旋轉方向:逆時針方向;

【3】雙旋轉

3.1)左右雙旋轉: (先左左單旋轉,再右右單旋轉; 即先順時針旋轉,后逆時針旋轉)

  • case1)因為47 介于 40 和 50 之間, 所以肯定需要雙旋轉;

3.2)右左雙旋轉:先將節點15向上提,還是不滿足AVL樹的條件,再把節點7向上提;(先右右單旋轉,再左左單旋轉; 即先逆時針旋轉,后順時針旋轉)

Conclusion of double rotations) 雙旋轉有兩個屬性: 軸 和 旋轉方向

  • C1)雙旋轉的軸:相信你也看到了, 雙旋轉的軸顯然是插入點的直接父節點;(除了兩個特例) (干貨——雙旋轉的軸顯然是插入點的直接父節點(除了兩個特例, 而兩個特例的軸是插入點本身))

    • C1.1)左右單旋轉的軸:插入點的父節點;
    • C1.2)右左單旋轉的軸:插入點的父節點;
  • C2)旋轉方向:

    • C2.1)左右單旋轉方向:先右右單旋轉,再左左單旋轉;即先逆時針旋轉,再順時針旋轉;
    • C2.2)右左單旋轉方向:先左左單旋轉,再右右單旋轉;即先順時針旋轉,再逆時針旋轉;

總結

以上是生活随笔為你收集整理的AVL树的单双旋转解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。