有序線性表查找快(O(log n)),但插入/刪除需移動大量元素(O(n))。鏈表雖插刪 O(1) 但查找退化 O(n)。二叉排序樹 (BST) 結合兩者優勢:鏈式存儲(插刪無需移動)+ 有序性(查找 O(h))。
數組 {9, 1, 5, 8, 3, 7, 4, 6, 2} 依次插入構造 BST。若輸入有序 {1,2,3,4,5},樹退化為右斜鏈表,樹高 h = n,查找退化 O(n)。
平衡二叉樹是 BST 的子集,附加條件:任意節點左、右子樹高度差 |bf| ≤ 1(平衡因子 Balance Factor = 左高 - 右高)。
| 失衡類型 | 插入位置 | 平衡因子變化 | 調整旋轉 |
|---|---|---|---|
| LL (Left-Left) | 左子樹的左子樹 | 根 bf=2, 左子 bf=1 | 右旋 (單旋) |
| RR (Right-Right) | 右子樹的右子樹 | 根 bf=-2, 右子 bf=-1 | 左旋 (單旋) |
| LR (Left-Right) | 左子樹的右子樹 | 根 bf=2, 左子 bf=-1 | 先左旋左子,再右旋根 (雙旋) |
| RL (Right-Left) | 右子樹的左子樹 | 根 bf=-2, 右子 bf=1 | 先右旋右子,再左旋根 (雙旋) |
| 維度 | 二叉排序樹 (BST) | 平衡二叉樹 (AVL) |
|---|---|---|
| 查找複雜度 | O(h) 平均 O(log n),最壞 O(n) | O(log n) 最壞保證 |
| 插入/刪除 | O(h),無調整 | O(log n) + O(1) 旋轉調整 |
| 實現複雜度 | 低 | 中(需維護高度/bf、四種旋轉) |
| 適用場景 | 數據隨機、查找為主、可容忍偶發退化 | 實時系統、頻繁增刪、需嚴格時間保證 |
map/set、Java TreeMap、Linux 內核 rb_tree 採用。BST 確立「鏈式存儲 + 有序性」的動態查找範式;AVL 以嚴格平衡保證最壞 O(log n);紅黑樹以工程友好的「近似平衡」成為通用庫標配;B+ 樹面向外存成為資料庫索引王者。掌握 BST→AVL→紅黑樹→B+ 樹的演進脈絡,是理解現代存儲引擎索引架構的鑰匙。