(21)Go實現AVL樹-算法解析

了解avltree樹之前先了解幾個概念  //
1)什么是二分搜索樹;
2)什么是平衡樹;
3)什么自平衡二分搜索樹;
1)二分搜索樹以及缺陷  //
如上圖,是一顆二分搜索樹,從添加查找節點,時間復雜度均為O(h),但在極端情況下,
如按順序向一個空二分搜索樹中添加0,1,2,3,4,二分搜索數會退化為單鏈,這時候時間
時間復雜度會變成O(n),如下圖,為了避免這種情況需要結合平衡樹做改進, //
2)平衡樹  //
3)如果一顆二分搜索樹按照平衡樹的形式分布,可以避免搜索樹退化為單鏈,
時間復雜度將一直是O(logN),由此有了自平衡二叉樹。
平衡二叉樹有以下特點://
1. 左右兩顆子樹的高度差不超過1;
2. 左右兩顆子樹也是一顆平衡二叉樹;
3. 能夠在二叉樹不滿足平衡二叉樹的條件下自動轉化為平衡二叉樹
AVL樹是自平衡樹的一種,也是最早的自平衡二分搜索樹,在1962年首次提出  //

問1:什么時候維護平衡?
答1:只有在插入或者刪除節點中,才有可能導致節點不平衡,在這兩個過程中維護平衡

問2:如何維護平衡?
答2:AVL樹通過左旋轉,右旋轉的方式來維護平衡,具體分以下4種情況:
1. 插入或刪除的節點在不平衡節點左側的左側 LL   -->  右旋轉;
2. 插入或刪除的節點在不平衡節點左側的右側 LR   -->  左節點先左旋轉,之后不平衡節點右旋轉;
3. 插入或刪除的節點在不平衡節點右側的右側 RR   -->  左旋轉;
4. 插入或刪除的節點在不平衡節點右側的左側 RL   -->  右節點先右旋轉,之后不平衡節點左旋轉;

如下面,圖演示過程:



具體實現和測試接另一篇
(22)Go實現AVL樹-實現和測試
http://www.lxweimin.com/p/c51a087278fb

有bug歡迎指出

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一些概念 數據結構就是研究數據的邏輯結構和物理結構以及它們之間相互關系,并對這種結構定義相應的運算,而且確保經過這...
    Winterfell_Z閱讀 5,979評論 0 13
  • AVL定義: AVL的命名是由2個其發明者的名字組成的,G.M.Adelson-Velsky和E.M.Landis...
    habit_learning閱讀 869評論 0 0
  • AVL樹 AVL樹,也稱平衡二叉搜索樹,AVL是其發明者姓名簡寫。AVL樹屬于樹的一種,而且它也是一棵二叉搜索樹,...
    timothyue1閱讀 957評論 1 1
  • 線段樹Segment Tree 對于有一類問題,時常關注的是一個區間或者是一個線段,那么就可以使用線段樹來解決。比...
    冒綠光的盒子閱讀 1,068評論 0 1
  • 記得剛工作那會兒,和閨蜜有個夢想,就是以后可以一起出國旅行shopping。好事成雙,今年我們一起出去兩次,3月韓...
    Ivy1125閱讀 441評論 0 1