読み方 : にぶんたんさくぎ

二分探索木【binary search tree】2分探索木/バイナリサーチツリー

概要

二分探索木とは、データ構造の一つである二分木(バイナリツリー)のうち、各ノードの値よりも左の子ノードの値の方が小さく、右の子ノードの値の方が大きくなるように構築したもの。データの探索に適したデータ構造である。
二分探索木のイメージ画像

木構造はグラフ構造のうち要素に親子関係があり、親が複数の子を持つことができるようなものを意味し、根ノード(root node)を頂点として階層的に枝分かれしていく構造となる。どの親ノードも子ノードを一つか二つしか持たないという制限を課されたものを「二分木」(binary tree/2分木)という。

二分探索木は二分木を構築する際に、どのノードも「左の子孫の値≦自らの値≦右の子孫の値」という条件を満たすように値を挿入していく。根ノードから出発して、挿入値が現在のノードより小さければ左の子、大きければ右の子ノードに移動していき、末端のノード(葉ノード)に達したら次に移動すべき場所に新たなノードを作成して値を格納する。N個の値の挿入には O(log N) の計算量がかかる。

格納された値を探索する際には、根ノードから出発して、各ノードの値が探索している値より大きければ左の子に、小さければ右の子ノードに移動していき、葉ノードまでたどる間に値が見つかれば探索は打ち切り、葉ノードに至っても値が見つからなければ「目的の値は存在しない」という結論になる。ノードがN個の木の探索には O(log N) の計算量がかかる。

このような探索法を「二分探索」(バイナリサーチ/二分探索法)という。根から葉までの深さ(高さ)の数だけ値を調べればよく、値を単純に端から順番に調べるより効率的に探索できる。なお、木にデータを追加する際に親と同じ値を左右どちらのノードに入れるかは任意だが、毎回異なることがないようあらかじめ決めておく。

平衡二分探索木 (self-balancing binary search tree)

二分探索木のうち、根ノードから子を持たない末端の葉ノードまでの深さ(高さ)がなるべく均等になるように構築されたものを「平衡二分探索木」という。

二分探索木で値を探索するには、根ノードから出発して、各ノードの値が探索している値より大きければ左の子に、小さければ右の子に移っていくが、枝によって深さがまちまちだと探索終了までの比較回数にばらつきが出る。

根から葉までの距離がなるべく均等な方が比較回数が揃って平均的に効率よく探索できるため、平衡二分探索木では値の挿入や削除の際に高さが均等になるような処理を行う。代償として、木の構築の際には平衡を考慮しない単純な二分探索木より時間がかかる。

他の辞典等による「二分探索木」の解説 (外部サイト)

資格試験などの「二分探索木」の出題履歴

▼ 基本情報技術者試験
【令8修6】 値が重複しない15個の自然数のデータを一つずつ追加して2分探索木を構成するとき,その構成に関する記述のうち,適切なものはどれか。
【令7修6/令6修6/令5修6/令2修1/平21修6】 葉以外の節点は全て二つの子をもち,根から葉までの深さが全て等しい木を考える。この木に関する記述のうち,適切なものはどれか。
【令7公】 図の木構造は2分探索木である。a~g の値の大小関係として,適切なものはどれか。ここで,a~g の値は重複しないものとする。
【令3修7/令1修7/平30修1/平28秋/平22修7】 2分探索木になっている2分木はどれか。
【令2修6/平31春/平27修12】 2分探索木として適切なものはどれか。ここで,数字1~9は,各ノード(節)の値を表す。
【平29修12/平28修6/平25春/平23修12】 次の2分探索木から要素12を削除したとき,その位置に別の要素を移動するだけで2分探索木を再構成するには,削除された要素の位置にどの要素を移動すればよいか。
【平27修6】 次の2分探索木に12を追加したとき,追加された節12の位置を正しく表している図はどれか。
【平23春】 空の2分探索木に,8,12,5,3,10,7,6の順にデータを与えたときにできる2分探索木はどれか。

本ページを参照・引用している文書・論文など (外部サイト)

この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。