値の大小を昇順に保ったまま要素を追加・削除できるデータ構造として、二分探索木がある。 各ノードは最大2つまでの子を持ち、左の子は自身より小さく、右の子は大きい。
7 / \ 5 9 / \ / 1 6 8 \ 3
こうすると、追加・削除を繰り返しながらも、常にソートされた状態が保たれる。 通常の配列にソート状態を保ちつつ追加・削除するには $O(N)$ 必要だが、平衡二分木では期待値 $O(\log{N})$ で可能になる。
具体的には、例えば以下のことが可能になる。
しかし、データを追加する順によっては左/右の枝にばかりデータが伸びる。これでは検索するにも線形探索と変わらなくなってしまう。
1 \ 3 \ 5 \ ...
そこで、適宜「回転」を加えるなどのテクニックを実装して、なるべく木の高さを低く保つようにした木を、平衡二分探索木という。
7 /\ 3 11 /\ /\ 15913