學習軌道
/
Elixir
Elixir
/
練習
/
二元搜尋樹
二元搜尋樹

二元搜尋樹

簡單

說明

在二元樹中插入及搜尋數字。

當我們需要表示已排序的資料時,陣列並不是一個好的資料結構。

假設我們有一個陣列[1, 3, 4, 5],並在其中加入 2,讓它變成[1, 3, 4, 5, 2]。 現在我們得把整個陣列重新排序一次! 我們可以改善這個做法:只要為新項目[1, nil, 3, 4, 5]騰出空間,再把項目放進新增的空間裡就行了。 但這仍然需要把許多元素往後位移一格。

不過,二元搜尋樹在處理已排序的資料時,效率要高得多。

二元搜尋樹由一連串相連的節點組成。 每個節點包含一筆資料(例如數字 3)、一個名為left的變數,以及一個名為right的變數。 left和right變數會指向nil或其他節點。 由於這些其他節點底下又接著其他節點,我們說 left 和 right 變數指向的是子樹。 左子樹中的所有資料都小於或等於目前節點的資料,而右子樹中的所有資料都大於目前節點的資料。

舉例來說,如果我們有一個包含資料 4 的節點,並加入資料 2,我們的樹會長這樣:

一個根節點為 4、只有一個子節點 2 的圖形。

      4
     /
    2

如果我們接著加入 6,它會變成這樣:

一個根節點為 4、有兩個子節點 2 和 6 的圖形。

      4
     / \
    2   6

如果我們接著加入 3,它會變成這樣

一個根節點為 4、有兩個子節點 2 和 6,以及一個孫節點 3 的圖形。

       4
     /   \
    2     6
     \
      3

而如果我們接著加入 1、5 和 7,它會變成這樣

一個根節點為 4、有兩個子節點 2 和 6,以及四個孫節點 1、3、5 和 7 的圖形。

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

致謝

這些圖片由 habere-et-dispertire 使用 Till Tantau 的 PGF/TikZ 製作。


出處

Josh Cheek
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Elixir Exercism

準備好開始 二元搜尋樹 了嗎?

註冊 Exercism,透過 58 個概念168 個練習 和真人引導來學習並精通 Elixir,全部免費。