1. 程式人生 > >AVL樹原理通俗解釋與例子

AVL樹原理通俗解釋與例子

  • AVL(Adelson-Velskii and Landis)樹是帶有平衡條件(balance condition)的二叉查詢樹。
  • 這個平衡條件必須容易保持,而且必須保證樹的深度是O(logN)。
  • AVL樹規定其每個結點的左子樹和右子樹的高度最多差1。
  • BF(Balance Factor) = 二叉樹上結點的左子樹深度 - 右子樹的深度。
  • 平衡二叉樹上的結點的BF值只能是1 -1 0,只要有一個結點的平衡因子絕對值大於1,就不平衡。
  • 構造AVL樹的時候,發生不平衡時:

    • 單向右旋平衡處理RR:
      由於在a的左子樹的左子樹進行插入(LL)則需進行一次右旋轉操作(R);

    • 單向左旋平衡處理LL:
      由於在a的右子樹的右子樹上插入(RR),則需進行一次左旋轉操作(L);

    • 雙向旋轉(先左後右)平衡處理LR:
      由於在a的左子樹的右子樹上插入結點(LR),則需進行兩次旋轉(先左旋後右旋)操作(LR)。

    • 雙向旋轉(先右後左)平衡處理RL:
      由於在a的右子樹左子樹上插入結點(RL),則需進行兩次旋轉(先右旋後左旋)操作(RL)。

    • 附:雙向旋轉的步驟:
      1.把子結點的BF值通過旋轉變成與根節點符號相同(以子結點為中心旋轉)。
      2.以根節點為中心旋轉。

    • 例:
      圖1