平衡樹 / AVL樹 數據結構原理、示例和算法實現

平衡二叉樹/AVL樹

定義

  • 平衡樹是具有如下性質的二叉查找樹:其左子樹和右子樹都是高度平衡的二叉樹,且左子樹和右子樹高度之差的絕對值不超過1。
  • 結點的平衡因子 BF (Balanced Factor) 定義爲:結點左子樹與右子樹的高度之差。
  • 平衡樹中的任意結點的 BF 只可能是 -1,0,+1
  • 例題:下述二叉樹中,哪一種滿足性質:從任一結點出發到根的路徑上所經過的結點序列按其關鍵字有序。
    • Choices:(A) 二叉排序樹 (B) AVL樹 © 堆
  • 分析:
    • 選項A:根據二叉排序樹的結構特點我們可以知道,二叉排序樹的中序遍歷結果是一個有序序列,而在中序遍歷中,父結點並不總是出現在孩子結點的前面(或後面),故該選項不正確。
    • 選項B:AVL樹其本質上也是一種二叉排序樹,只不過是平衡化之後的二叉排序樹,故該選項也是不正確的。
    • 選項C:根據建堆的過程,不斷地把大者“上浮”,將小者“篩選”下去,最終得到的正是一個從任一結點出發到根的路徑上所經過的結點序列按其關鍵字有序的樹狀結構。

插入

  • 每次插入時,發現有任意一點平衡因子不是-1,0,+1,則進行旋轉操作

  • 主要涉及2點的旋轉

    • LL:新結點Y被插入到A的左子樹的左子樹上;
    • RR:新結點Y被插入到A的右子樹的右子樹上;
  • 主要涉及3點的旋轉

    • LR:新結點Y被插入到A的左子樹的右子樹上;
    • RL:新結點Y被插入到A的右子樹的左子樹上;

LL & RR

LR && RL

例題演示

查找

  • 方法與二叉查找樹相同
  • 平均查找長度
    • 相同節點時,期望相同
    • 平衡樹方差小
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章