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

2分探索木

pointこの用語のポイント

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

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

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

スポンサーリンク

簡単に書くよ

2分探索木(読:ニブンタンサクギ 英:binary search tree)とは

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


image piyo

詳しく書くよ

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



ツリー構造木構造
2分木


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

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

例えば、そうですね。

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

2分探索木

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

2分探索木2

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

2分探索木3

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

2分探索木4

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

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

2分探索木5

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

2分探索木6

2分木を構成する要素は

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

2分探索木7

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

2分探索木8

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

2分探索木9

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

2分探索木10

の4つです。

2分探索木11

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

以上を踏まえて

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

が「2分探索木」です。

2分探索木12

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

2分探索木13

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

2分探索木14

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

2分探索木15

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

2分探索木16

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

2分探索木17

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

2分探索木18

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

2分探索木19

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

2分探索木20

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

2分探索木21

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

2分探索木22

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

2分探索木23

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

2分探索木24

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

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

が2分探索木です。

2分探索木25

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

あと注意点として、2分探索木の説明において「左の子≦親<右の子(もしくは、左の子<親≦右の子)」と説明されていることがあります。
これは少し話を単純化して説明されています。
実際には「左の子と、その子孫≦親<右の子と、その子孫(もしくは、左の子と、その子孫<親≦右の子と、その子孫」です。

2分探索木27

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

例えば、そうですね。
以下の2分探索木が あったとしましょう。

2分探索木27

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

2分探索木28

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

2分探索木29

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

2分探索木30

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

2分探索木31

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

2分探索木32

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

2分探索木33

それでは次に、以下の2分探索木もどきを見てください。
この2分探索木もどきも、すべての要素において「左の子<親<右の子」は満たしています。

2分探索木34

この2分探索木もどきを使って先ほどと同じように「6」を探してみましょう。

2分探索木35

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

2分探索木36

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

2分探索木37

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

2分探索木38

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


image piyo2

一言でまとめるよ

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

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

おまけ

■検索してみる?




書籍画像
わわわ説明術コラム
宣伝だよ
「分かった!」と思わせる説明の技術 知識ゼロの相手にも伝わるようになる本【Audible】
優れたエンジニアがコミュニティの中でしていること
サイバー忍者入門 忍者・スパイ・軍隊・ハッカーに学ぶ フルスタック・ハッキング