數據結構-自平衡二叉排序樹AVL Tree(基礎知識)

自平衡二叉排序樹簡介

自平衡二叉排序樹 AVL Tree

二叉樹有一個最大的缺陷就是在最糟糕情況下,二叉樹呈現單鏈表的數據結構。爲了杜絕這個問題產生了中特定規則的樹,其中一個非常著名的是平衡二叉樹。

平衡二叉樹每個結點,其左右子樹的深度之差的絕對值小於等於 1

自平衡二叉排序樹快在查找,刪除和插入影響性能

自平衡二叉排序樹的旋轉

法則:

  • 左左型:向右旋轉
  • 右右型:向左旋轉
  • 左右型:先向右旋轉,再向左旋轉
  • 右左型:先向左旋轉,再向右旋轉

二叉排序樹當存入結點一個比一個大時,呈現全部爲右子樹的單鏈表形式,這種方式查找效率就比較低了。因此我們想到自平衡二叉排序樹,左右子樹深度差的絕對值小於等於 1,然後每次插入一個結點,它進行自平衡一次達到平衡二叉樹的規則即可。那麼我們如何去平衡呢?下面我舉幾個例子:

  • 左左型

    如下圖左左形將 12 結點往右旋轉,使得 11 重新成爲根結點

    在這裏插入圖片描述

  • 右右型

    如下圖右右形將 10 結點往左旋轉,使得 11 重新成爲根結點

    在這裏插入圖片描述

  • 左右型

    如下圖左右形,將 12 結點先向右旋轉使得 10 作爲根,再將 10 結點向左旋轉使得 11 作爲根

    在這裏插入圖片描述

  • 右左型

    如下圖右左形,將 10 結點先向左旋轉使得 12 作爲根,再將 12 結點向右旋轉使得 11 作爲根

    在這裏插入圖片描述

自平衡二叉排序樹的優勢

自平衡的二叉排序樹可以避免單鏈表形式的二叉樹,可以實現快速查找(二分查找)

自平衡二叉排序樹的缺陷

自平衡的二叉排序樹缺陷也很明顯,那就是我們每次刪除或加入新的樹節點時候,總會打破“平衡”這一準則,所以我們每次幾乎都要改變樹的結構使其“平衡”,因此當我們處於刪除插入頻繁的場景中時,這種數據結構的性能就會大打折扣了!

自平衡二叉排序樹的缺陷補漏

紅黑樹誕生了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章