「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

バイナリサーチツリー

pointこの用語のポイント

point枝分かれして広がっていく構造だよ

point1つの親に対して最大2つの子を持つよ

pointすべての要素で値の大小関係が「左≦自分<右(もしくは、左<自分≦右)」になっているよ

スポンサーリンク

簡単に書くよ

バイナリサーチツリー(英:binary search tree)とは

「二分探索木」のこと。
用語の中身としては

それぞれの要素の枝分かれが2つまでしかない枝分かれして広がっていく構造(二分木)になっていて、すべての要素で値の大小関係が「左≦自分<右(もしくは、左<自分≦右)」になっているやつのこと
です。


image piyo

詳しく書くよ

順番に見ていきましょう。
まずは予備知識として



ツリー構造木構造
二分木


について簡単に説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。

は「関係性を図に書いたときに上にくる方」です。
は「関係性を図に書いたときに下にくる方」です。

例えば、そうですね。

ここにピヨ太ママがいたとしましょう。

バイナリサーチツリー

ピヨ太ママはピヨ太君を作りました。

バイナリサーチツリー2

ピヨ太ママとピヨ太君の関係性を図で表現する場合、一般的には上にピヨ太ママを書いて下にピヨ太君を描きます。

バイナリサーチツリー3

このときのピヨ太ママが「親」です。
ピヨ太君が「子」になります。

バイナリサーチツリー4

……と、もったいぶって書きましたが、イメージは人間の親子関係と同じです。

ツリー構造木構造は「1つの親に対して複数の子を持つ、枝分かれして広がっていく構造」です。
上から下に広がっていく形で図を書くと、木を上下逆さまに見たような形になります。

バイナリサーチツリー5

二分木は「ツリー構造のうち、枝分かれが最大2つのもの」です。
「最大つにかれる構造」だから「二分木」なんでしょうかね。

バイナリサーチツリー6

二分木を構成する要素は

1.入ってくるのがなくて、出ていくのが2つ

バイナリサーチツリー7

2.入ってくるのが1つで、出ていくのが2つ

バイナリサーチツリー8

3.入ってくるのが1つで、出ていくのが1つ

バイナリサーチツリー9

4.入ってくるのが1つで、出ていくのがない

バイナリサーチツリー10

の4つです。

バイナリサーチツリー11

1が枝分かれのスタートです。
2と3が枝分かれの途中です。
4が枝分かれの最後になります。

以上を踏まえて

すべての要素で値の大小関係が「左≦自分<右(もしくは、左<自分≦右)」になっている二分木

が「バイナリサーチツリー」です。
二分探索木」とも呼ばれます。

バイナリサーチツリー12

例えば、そうですね。
「1」から「9」までの9つの数字が あったとしましょう。

バイナリサーチツリー13

一番上の要素が「5」でした。

バイナリサーチツリー14

このとき、左に入る可能性があるのは「1」から「4」のどれかです。
左には「5」より小さいやつが入れます。

バイナリサーチツリー15

右に入る可能性があるのは「6」から「9」のどれかです。
右には「5」より大きいやつが入れます。

バイナリサーチツリー16

今回は左に「2」が入ったとしましょう。
右には「7」が入りました。

バイナリサーチツリー17

次は「2」に注目してください。

バイナリサーチツリー18

「2」の左に入る可能性があるのは「1」だけです。
左には「2」より小さいやつが入れます。

バイナリサーチツリー19

「2」の右に入る可能性があるのは「3」か「4」です。
右には「2」より大きいやつで、かつ「2」の親である「5」より小さいやつが入れます。

バイナリサーチツリー20

今回は左に「1」を、右に「3」を入れました。

バイナリサーチツリー21

次は「7」に注目してください。

バイナリサーチツリー22

「7」の左に入る可能性があるのは「6」だけです。
左には「7」より小さいやつで、かつ「7」の親である「5」より大きいやつが入れます。

バイナリサーチツリー23

「7」の右に入る可能性があるのは「8」か「9」です。
右には「7」より大きいやつが入れます。

バイナリサーチツリー24

このようなことを繰り返して作った……とは限りませんが

すべての要素で値の大小関係が「左≦自分<右(もしくは、左<自分≦右)」になっている二分木

がバイナリサーチツリーです。

バイナリサーチツリー25

なお、今回は値の重複は考えませんでした。
もし値が重複した場合は「左にする(左≦自分<右)」もしくは「右にする(左<自分≦右)」を統一しておきます。
どちらにするかの決まりは(多分)ありません。
決めの問題です。

あと注意点として、バイナリサーチツリーの説明において「左の子≦親<右の子(もしくは、左の子<親≦右の子)」と説明されていることがあります。
これは少し話を単純化して説明されています。
実際には「左の子と、その子孫≦親<右の子と、その子孫(もしくは、左の子と、その子孫<親≦右の子と、その子孫」です。

バイナリサーチツリー27

そうなっていないと値を探すときに使えません。

例えば、そうですね。
以下のバイナリサーチツリーが あったとしましょう。

バイナリサーチツリー27

この中から「6」を探すとします。

バイナリサーチツリー28

まずは一番の親である「5」に行きます。

バイナリサーチツリー29

「6」は「5」より大きいですよね。
右に行きます。

バイナリサーチツリー30

右に行ったら「7」に到着しました。

バイナリサーチツリー31

「6」は「7」より小さいですよね。
左に行きます。

バイナリサーチツリー32

左に行ったら「6」に到着しました。
無事に「6」が見つかりましたね。

バイナリサーチツリー33

それでは次に、以下のバイナリサーチツリーもどきを見てください。
このバイナリサーチツリーもどきも、すべての要素において「左の子<親<右の子」は満たしています。

バイナリサーチツリー34

このバイナリサーチツリーもどきを使って先ほどと同じように「6」を探してみましょう。

バイナリサーチツリー35

まずは一番の親である「5」に行きます。

バイナリサーチツリー36

「6」は「5」より大きいですよね。
右に行きます。

バイナリサーチツリー37

はい、この時点で「6」には、たどり着けなくなりましたよね。
「6」は「5」より左にあります。

バイナリサーチツリー38

ということで「左の子≦親<右の子」のような説明を見かけたら「左の子と、その子孫≦親<右の子と、その子孫」と読み替えてあげてください。
枝分かれした左の先にあるのは全部小さい値、枝分かれした右の先にあるのは全部大きい値です。


image piyo2

一言でまとめるよ

まぁ「バイナリサーチツリー」って単語が出てきたら「すべての要素で値の大小関係が「左≦自分<右(もしくは、左<自分≦右)」になっている二分木(それぞれの要素の枝分かれが最大2つまでのツリー構造)なんだな~」と お考えください。

一番上に戻るよ
スポンサーリンク
書籍画像011
書籍画像079

おまけ

■訳してみるよ

「binary(バイナリ)」の意味は「2値の」とか「2進法の」とか「二元の」とかです。
「search(サーチ)」の意味は「探す」とか「調べる」とか「検索」とかです。
「tree(ツリー)」の意味は「木」とかです。
何となく くっつけると

2値検索の木

となります。




書籍画像
わわわ説明術コラム
宣伝だよ
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本
実践サイバーセキュリティ入門講座 現場に残された痕跡からハッカーの攻撃を暴け
ウォーターサーバーのキャッチコピーを100本考える方法