Notes
← All notes
·frontend·16 min

LeetCode Cycle 09:樹的基礎、BST 與三種 traversal

樹這題在面試常見的失誤不是寫不出 traversal,是搞不清「為什麼挑 inorder 不挑 preorder」「BFS 為什麼配 queue 不配 stack」。Cycle 09 把 [Cycle 06 stack] + [Cycle 07 遞迴] + [Cycle 01 binary search] 三條線收攏成一個結構。內部使用。

#leetcode#algorithm#tree#binary-tree#bst#traversal#dfs#bfs#interview-prep#面試系列#private

Cycle 09 排在 backtracking 之後其實是順理成章——Cycle 08 把遞迴詮釋成「樹形搜索」,Cycle 09 進來把那棵樹真的拿出來操作。前面三條線在這裡會合:

  • Cycle 01 binary search 的 O(log n):在 BST 上重現
  • Cycle 06 stack:iterative traversal 用到
  • Cycle 07 recursion:三部曲還是同一套

面試 tree 題的判定點不是「能不能寫出來」,而是「為什麼挑這個 traversal」。看到 BST 沒人挑 preorder,看到「先處理子節點再處理自己」沒人挑 BFS——這條對應關係要熟到自動反射。

四種樹

類型定義
滿二元樹(full)每個節點要嘛 0 子要嘛 2 子,所有葉子在同一層
完全二元樹(complete)除了最後一層,每層都滿;最後一層節點靠左排
二元搜尋樹(BST)左子樹所有節點 < 自己 < 右子樹所有節點,遞迴成立[^1];每次找值可砍掉一半子樹,平衡時 O(log n)
平衡 BST在 BST 基礎上加:每個節點左右子樹高度差 ≤ 1