トラック
/
Elixir
Elixir
/
演習
/
二分探索木
二分探索木

二分探索木

初級

説明

二分木に数値を挿入し、検索します。

ソートされたデータを表すとき、配列は適したデータ構造とは言えません。

配列[1, 3, 4, 5]があって、そこに2を追加して[1, 3, 4, 5, 2]になったとします。すると、配列全体をもう一度ソートし直さなければなりません! 新しい要素のために場所をひとつ空けて[1, nil, 3, 4, 5]とし、空けた場所に要素を追加すればよいと考えれば、これは改善できます。しかし、それでも多くの要素をひとつ後ろにずらす必要があります。

しかし、二分探索木なら、ソートされたデータをはるかに効率よく扱えます。

二分探索木は、つながったノードの連なりからできています。各ノードは、1つのデータ(たとえば数値の3)、leftという名前の変数、そしてrightという名前の変数を保持します。leftとrightの変数は、nilか、別のノードを指します。それらのノードの下にはさらにノードが続くので、leftとrightの変数は部分木を指していると言います。左の部分木のデータはすべて現在のノードのデータ以下で、右の部分木のデータはすべて現在のノードのデータより大きくなっています。

たとえば、データ4を持つノードに、データ2を追加すると、木は次のようになります。

根ノード4と、子ノード2が1つだけあるグラフ。

      4
     /
    2

さらに6を追加すると、次のようになります。

根ノード4と、2つの子ノード2および6があるグラフ。

      4
     / \
    2   6

さらに3を追加すると、次のようになります。

根ノード4、2つの子ノード2と6、そして孫ノード3があるグラフ。

       4
     /   \
    2     6
     \
      3

そしてさらに1、5、7を追加すると、次のようになります。

根ノード4、2つの子ノード2と6、そして4つの孫ノード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を学んでマスターできます。すべて無料です。