演算法圖鑑
Tree · 比較表

樹狀資料結構比較

BST、平衡樹、字典樹、線段樹、Fenwick 樹:各自支援哪些操作、能不能改、什麼問題該用哪一棵。

演算法時間空間核心操作可修改難度
BST二元搜尋樹O(h)O(h)可比較的值查、插、刪、前驅後繼進階
Balanced BST平衡樹概念O(log n)O(n)可比較的值BST 全部,保證 O(log n);範圍查詢、第 k 小困難
Trie字典樹O(L)O(ΣL)字串的每個字元插入、查詞、查前綴進階
Segment Tree線段樹O(log n)O(n)陣列索引區間查詢(和、最大、最小、任何可合併的)、單點或區間更新困難
Fenwick Tree (BIT)樹狀陣列O(log n)O(n)陣列索引前綴和、單點更新困難

什麼時候選哪一個

選擇指南

  • 有序 + 動態增刪 → 平衡樹(用內建的)。只查在不在 → 雜湊表更快。資料不變 → 排序陣列 + 二分就夠。
  • 區間和、資料不變 → 前綴和(O(1) 查)。區間和、會改 → Fenwick。區間最大/最小、會改 → 線段樹。
  • 區間更新(整段加值、整段賦值)→ 線段樹加懶標記。Fenwick 只能做「區間加、單點查」這一種變形。
  • 鍵是字串且問前綴 → 字典樹。鍵是字串但只問相等 → 雜湊表,字典樹沒有優勢。
  • 第 k 小、排名 → 平衡樹(帶子樹大小)或值域上的 Fenwick 樹,後者在值域可離散化時更好寫。