什麼是二叉樹?

二叉樹是數據結構中最基礎也最重要的結構之一,就像蓋房子先打地基一樣,理解二叉樹能幫你後續輕鬆掌握更復雜的結構(比如堆、紅黑樹等)。

想象一下,二叉樹長得像一棵“分叉樹”——每一個“分叉點”都是一個“節點”,每個節點最多能分出兩個“子節點”,左邊的叫“左子節點”,右邊的叫“右子節點”。沒有子節點的節點叫“葉子節點”(就像樹的葉子一樣)。

舉個簡單的例子:你家院子裏有一棵蘋果樹,每個蘋果可以看作一個“節點”,連接蘋果和樹幹的樹枝就是“邊”。如果樹幹是“根節點”,它可能分出兩根樹枝(左枝和右枝),每根樹枝上又可能有多個蘋果(子節點),但每根樹枝最多隻能有兩個蘋果(因爲二叉樹每個節點最多兩個子節點)。

二叉樹的“零件清單”:基本術語

要畫二叉樹,得先認識它的“零件”:

  • 節點:樹的基本單元,裏面可以放數據(比如數字、字符串等)。
  • 根節點:樹的“最頂層”節點,沒有父節點,是樹的起點。
  • 葉子節點:沒有子節點的節點,是樹的“最底層”。
  • 子節點:從某個節點“長”出來的下一層節點(左子節點或右子節點)。
  • 父節點:有子節點的節點(比如“根節點”是“左子節點”的父節點)。
  • 左子樹/右子樹:一個節點的左子節點和它的所有後代組成“左子樹”,右子節點和它的所有後代組成“右子樹”。

手把手畫二叉樹:從簡單到複雜

現在,我們用“畫圖法”一步步掌握二叉樹的畫法,跟着步驟畫,你會發現超簡單!

第一步:最簡單的二叉樹——只有根節點

先畫一個“圓圈”代表根節點,裏面寫個數字(比如1)。這棵樹只有根節點,沒有子節點,所以它也是葉子節點。

  1

第二步:根節點只有左子節點

在根節點的正下方偏左畫一個小圓圈(左子節點),裏面寫數字(比如2)。根節點的右邊暫時不畫(表示沒有右子節點)。

  1
 /
2

第三步:根節點只有右子節點

在根節點的正下方偏右畫一個小圓圈(右子節點),裏面寫數字(比如2)。左邊不畫。

  1
   \
    2

第四步:根節點有左右兩個子節點

根節點下面偏左畫左子節點(比如2),偏右畫右子節點(比如3)。

  1
 / \
2   3

第五步:給左子節點再“長”出子節點

以第二步的樹爲例,左子節點2可以繼續長左子節點(4)和右子節點(5)。此時樹的結構是:

    1
   / \
  2   3
 / \
4   5

這裏要注意:每個節點最多隻能有兩個子節點,不能多畫。比如如果2下面畫了三個子節點,那就不是二叉樹了!

第六步:給右子節點也“長”出子節點

繼續在第四步的基礎上,給右子節點3加左子節點6和右子節點7:

    1
   / \
  2   3
 / \ / \
4  5 6  7

第七步:判斷“不是二叉樹”的錯誤畫法

錯誤例子1:某個節點有三個子節點(比如根節點1下面畫三個分支):

  1
 /|\
2 3 4  // 這不是二叉樹!

錯誤例子2:子節點位置混亂(比如左子節點的右子節點比根節點的右子節點還高)——畫圖時儘量保持層次,根節點在最上,子節點在根的下一層,孫子節點在子節點的下一層,以此類推。

二叉樹的“身份驗證”:怎麼判斷是二叉樹?

只要滿足兩個條件,就是二叉樹:

  1. 每個節點最多有0、1或2個子節點(不能超過2個);
  2. 所有子節點的位置是有序的(左子節點和右子節點有明確區分,不能交換順序而改變樹的結構)。

二叉樹遍歷與畫圖結合(簡單版)

知道了怎麼畫樹,那怎麼通過“遍歷結果”反推樹的結構呢?這裏先簡單介紹三種遍歷方式(後續會深入):

  • 前序遍歷(根→左→右):先畫根節點,再畫左子樹,最後畫右子樹。
  • 中序遍歷(左→根→右):先畫左子樹,再畫根節點,最後畫右子樹。
  • 後序遍歷(左→右→根):先畫左子樹,再畫右子樹,最後畫根節點。

舉例:假設前序遍歷結果是 1 2 4 5 3 6 7,怎麼畫出樹?

  • 前序第一個是根節點1,所以先畫1。
  • 前序剩下的是左子樹(2 4 5)和右子樹(3 6 7)。
  • 左子樹的第一個是2,所以2是1的左子節點。
  • 2的前序剩下4、5,4是2的左子節點,5是2的右子節點。
  • 右子樹的第一個是3,所以3是1的右子節點。
  • 3的前序剩下6、7,6是3的左子節點,7是3的右子節點。

最終畫出的樹和之前第四步加第五步的例子一致:

    1
   / \
  2   3
 / \ / \
4  5 6  7

總結:畫樹是理解二叉樹的“金鑰匙”

二叉樹的“畫”是學習的核心——通過畫圖,你能直觀看到每個節點的位置、子節點的數量和層次關係。剛開始可能覺得難,多畫幾次簡單的樹(比如只有根、只有左/右孩子、三層樹),很快就能掌握。

記住:二叉樹是堆、二叉搜索樹、哈夫曼樹等複雜結構的“地基”,畫樹的過程不僅能幫你理解基礎,還能爲後續學習算法(比如排序、查找)打下堅實基礎。

現在,你可以找一張紙,嘗試畫一棵包含根、左右孩子、孫子節點的二叉樹,動手畫一兩個例子,你會發現:二叉樹,原來這麼簡單!

小夜