データ構造

二分探索木

二分探索木では、左部分木の値はそのノードより小さく、右部分木の値は大きくなります。比較のたびに左右どちらかへ進むため、バランスの良い木では効率よく検索できます。

二分探索木の挿入・検索・削除シミュレーター

1. 例を読み込むか木をクリア

2. 値を入力して操作を選択

ノード数0
高さ(最長経路のノード数)0
検索の最大比較回数0

挿入と検索では根からの経路がオレンジ色になります。整列済みの値で作成すると木が偏る様子を確認できます。

検索・挿入・削除

根から検索を始め、小さい値なら左、大きい値なら右の子へ進みます。挿入も同じ経路をたどり、最初の空き位置にノードを追加します。

削除方法は子の数によって異なります。葉はそのまま削除し、子が1つならその子で置き換えます。子が2つなら右部分木の最小値で置き換え、大小関係を維持します。

木の形が性能を決める

最悪時の比較回数は木の高さと同じです。平衡な木の高さはO(log n)ですが、通常の二分探索木に整列済みデータを挿入すると高さnの鎖になります。AVL木や赤黒木は回転や平衡条件により高さをO(log n)に保ちます。