📚 由淺至深
第 16 章 中等 約 15 分鐘

二元搜尋樹:左小右大的樹

樹版本的二分搜尋,新增/查詢平均 O(log n)。但歪掉會變 O(n),所以才有後來的 AVL/紅黑樹。

建議先看過: 08-binary-search 12-graph-basics

一棵「左小右大」的樹

二元搜尋樹 (BST) 是一種樹,每個節點有 ≤2 個子節點,而且:

  • 左子樹的所有值 < 節點值
  • 右子樹的所有值 > 節點值

例:依序插入 50, 30, 70, 20, 40, 60, 80:

50307020406080

注意 30 的左子樹(20)都 < 30,右子樹(40)> 30。整棵樹都符合這條規則。

查詢:跟二分搜尋一樣

要找 60,從根 50 開始:

50 → 60 比 50 大,往右
70 → 60 比 70 小,往左
60 → 找到!

每一步把搜尋範圍減半——平均 O(log n)

插入:找到位置塞下去

要插入 35:

50 → 35 &lt; 50,往左到 30
30 → 35 &gt; 30,往右到 40
40 → 35 &lt; 40,往左→ 空 → 新節點 35 放這

三種走訪

BST 有三種經典走訪順序(考試必考):

走訪順序結果(上面那棵樹)
中序 (Inorder)左 → 根 → 右20, 30, 40, 50, 60, 70, 80 ← 排好序了!
前序 (Preorder)根 → 左 → 右50, 30, 20, 40, 70, 60, 80
後序 (Postorder)左 → 右 → 根20, 40, 30, 60, 80, 70, 50
💡關鍵性質

BST 的中序走訪 = 把所有值由小到大排出來。 這是 BST 最重要的性質,考試很愛問。

複雜度

操作平均最壞
查詢 / 插入 / 刪除O(log n)O(n) ⚠️

最壞何時發生?樹歪掉變一條長鏈(例如按順序插入 1, 2, 3, 4, 5…):

123變成 O(n) 的鏈

這個問題的解法是 自平衡 BST:AVL Tree、紅黑樹 (Red-Black Tree)。 它們會在插入時自動「轉一下」維持高度 O(log n)。

📝考試會這樣考

題型一:按順序插入一串數字,畫出 BST。

例:依序插入 50, 30, 70, 25, 40, 60, 80。畫出結果。 訣竅:一個一個來,每個都從根開始走「小左大右」直到空位。

題型二:給 BST,寫出三種走訪。 記訣竅:「中序左中右、前序中左右、後序左右中」。

題型三:BST 最壞情況什麼時候發生?怎麼避免? 答:按已排序順序插入時,BST 退化成鏈,變 O(n)。 避免:用 AVL 樹紅黑樹等自平衡 BST。

題型四:給前序 + 中序,重建 BST。 經典題。技巧:前序第一個是根,中序找根的位置,左邊是左子樹、右邊是右子樹,遞迴。

這章記住

  1. BST = 左小右大的樹,中序走訪會排序。
  2. 平均 O(log n)、最壞 O(n)(樹歪掉時)。
  3. 三種走訪(中、前、後序)背順序、會畫。
  4. 實務用 AVL / 紅黑樹保證平衡。

學習進度只存在你的瀏覽器,不會上傳。