章節:樹(Trees)

歡迎!在這個章節中,我們將一起探索樹(Trees)。在計算機科學中,樹並不是公園裡那種長著葉子和樹皮的植物,而是一種組織數據的方式,讓我們能夠極快地搜尋、添加和刪除資訊。如果你曾經在電腦上使用「檔案總管」來查看資料夾,那你其實已經用過樹狀結構了!

如果一開始覺得這些概念有點抽象,別擔心。我們會用簡單的類比一步步拆解,確保你能夠自信地掌握這些知識。

1. 什麼是樹?

從技術層面來說,是一種非線性數據結構。與陣列(Array)或列表(List,就像排成一列的人)不同,樹會向不同的方向分支。

關鍵術語

要理解樹,我們需要先學習描述它們的「家族」術語:

  • 節點(Node):樹中的個別數據項目(就像家譜中的一個人)。
  • 邊(Edge):連接兩個節點的連結或線條。
  • 根節點(Root):樹最頂端的節點。每一棵樹都只有一個根節點。
  • 父節點(Parent):擁有連接到下方節點的邊的節點。
  • 子節點(Child):從上方節點延伸出邊所連接到的節點。
  • 葉節點(Leaf):沒有子節點的節點(它位於分支的最末端)。
  • 子樹(Subtree):樹中的一個較小區段,其本身也是一棵樹。

現實生活類比:想像一家公司的架構。執行長(CEO)是根節點。經理是員工的父節點,而員工則是子節點。處於最底層、不需要管理任何人的員工就是葉節點

快速複習:

根節點是唯一沒有父節點的節點。
葉節點是唯一沒有子節點的節點。
連接父節點與子節點。


2. 二元樹(Binary Trees)

二元樹是一種遵循簡單規則的特殊樹:每個節點最多只能有兩個子節點。

想像一個人最多只有兩個孩子。在二元樹中,我們通常將這兩個孩子稱為左子節點(Left Child)右子節點(Right Child)

你知道嗎?二元樹的效率非常高。如果你擁有一棵包含 1,000 個項目且完全平衡的二元樹,你只需要大約 10 個步驟就能找到任何特定項目!

二元搜尋樹(Binary Search Trees, BST)

二元搜尋樹是一種二元樹,其中的數據以特定順序排列,使搜尋速度更快。其規則如下:

  1. 比父節點的值放在左側
  2. 比父節點的值放在右側

例子:如果根節點是 10,你想添加 5,它會放在左側。如果你想添加 15,它會放在右側

關鍵重點:

BST 的黃金法則就是:左小右大(Left is Less, Right is More)。


3. 樹的遍歷(Tree Traversals)

遍歷是一個專業術語,意指「存取樹中的每一個節點一次」。根據我們存取節點的順序不同,會得到不同的結果。你需要掌握三種主要類型:

1. 前序遍歷(Pre-order Traversal)

在此方式中,我們依序存取根節點,然後是左子樹,最後是右子樹
記憶法:Root(根)Pre(前面),優先於其他所有項目。

2. 中序遍歷(In-order Traversal)

我們依序存取左子樹,然後是根節點,最後是右子樹
記憶法:Root(根)In(中間)
專業小貼士:如果你對一棵二元搜尋樹執行中序遍歷,輸出的數字將會呈現完美的數值排序!

3. 後序遍歷(Post-order Traversal)

我們依序存取左子樹,然後是右子樹,最後才是根節點
記憶法:Root(根)Post(後面),最後處理。

如何輕鬆完成(「外框」技巧):

如果你有一棵樹的圖表,從根節點的左側開始畫一條連續的線,繞著樹的外圍繞一圈(就像用繩子把它包起來一樣)。

前序遍歷:當你經過節點的左側時標記它。
中序遍歷:當你經過節點的底部時標記它。
後序遍歷:當你經過節點的右側時標記它。


4. 在 BST 中添加與搜尋

在二元搜尋樹中搜尋數值就像玩「猜大小」遊戲一樣。

逐步搜尋:

  1. 根節點開始。
  2. 你要找的值是否等於當前節點?如果是,那就找到了!
  3. 數值是否較小?前往左子節點並重複步驟 2。
  4. 數值是否較大?前往右子節點並重複步驟 2。
  5. 如果你到達了一個無法再往下移動的點(沒有子節點),說明該數值不存在於樹中。

常見錯誤:

學生常忘記在添加節點時,必須遵循搜尋規則,直到找到一個空位(葉節點)。你不能隨便放置!你必須在過程中將它與沿途的每個父節點進行比較。

快速複習方框:

搜尋或添加:
1. 從根節點開始。
2. 進行比較。
3. 較小?往左走。
4. 較大?往右走。
5. 重複直到找到目標或到達空位。


總結檢查清單

檢查你的理解程度:
[ ] 我能定義根節點、父節點、子節點和葉節點嗎?
[ ] 我知道二元樹的每個節點最多只能有 2 個子節點嗎?
[ ] 我能記住搜尋樹的「左小右大」規則嗎?
[ ] 我能執行中序、前序和後序遍歷嗎?

做得好!樹是計算機科學的基礎組成部分。一旦你掌握了「左 vs 右」的邏輯,你就已經攻克了最困難的部分。