問6 AVL 木への追加と回転

応用情報​技術者試験 令和7年度 春期 午前、全80問のうちの問6。

出典:令和7年度 春期 応用情報技術者試験 午前 問6(木の図は、節ごとに左の子と右の子を並べた表に書き起こした。選択肢の木も同じ形の表にし、選択肢の文は表を指す形にした)

図の 2 分探索木に 1 と 0 の二つの要素を順に追加した AVL 木として,適切なものはどれか。

図 元の 2 分探索木 (根は 5。子の無い節 2,4,6 は省いた)
節左の子右の子
537
324
76なし
ア (根は 3。子の無い節 0,2,4,7 は省いた)
節左の子右の子
315
102
546
6なし7
イ (根は 4。子の無い節 0,3,5,7 は省いた)
節左の子右の子
426
213
10なし
657
ウ (根は 5。子の無い節 0,2,4,6 は省いた)
節左の子右の子
537
314
102
76なし
エ (根は 5。子の無い節 0,2,4,7 は省いた)
節左の子右の子
536
314
102
6なし7
  1. ア表アの木
  2. イ表イの木
  3. ウ表ウの木
  4. エ表エの木
答えと解説を開く

正解はウです。

AVL 木は、どの節でも左右の部分木の高さの差が 1 以下になるように保つ 2 分探索木です。まず 1 を追加すると、5、3、2 と左へ進み、2 の左の子になります。このとき節 2 の左右の差は 1、節 3 は左が 2 段で右が 1 段、節 5 は左が 3 段で右が 2 段なので、すべて差は 1 以下です。次に 0 を追加すると、1 の左の子になります。節 2 は左が 2 段、右が 0 段で差が 2 になり、決まりが崩れます。節 3 (左 3 段、右 1 段) と節 5 (左 4 段、右 2 段) も差が 2 になりますが、直すのは崩れた節のうち一番下にある節 2 です。そこで節 2 で右回転をします。1 を上げて、左の子を 0、右の子を 2 にします。すると節 3 の左の子が 1 になり、1 の下に 0 と 2 が並びます。これで節 3 は左 2 段、右 1 段、節 5 は左 3 段、右 2 段に戻り、ほかの節はそのままです。この形がウです。ア、イ、エも AVL 木の条件は満たしていますが、元の木に追加して回転した結果ではありません。正解はウです。

ほかの選択肢が違う理由

  • アAVL 木の条件は満たしていますが、根を 3 に替えるほど大きく組み替えています。崩れた節のうち一番下にある節 2 で 1 回回転すれば、節 3 と節 5 の差も 1 以下に戻るので、根の 5 は動きません。
  • イAVL 木の条件は満たしていますが、根を 4 に替えて全体を作り直しています。元の木に追加して、崩れた節 2 だけを回転した結果ではありません。
  • エ左の部分木はウと同じですが、右の部分木で 7 と 6 の親子が入れ替わっています。追加したのは左の部分木なので、右の部分木は 7 の左の子が 6 という元の形のままです。

仕組み

AVL 木は、追加や削除のたびに高さの差を見て、差が 2 になった節で回転をして釣り合いを戻します。こうすることで、探索にかかる回数がいつもおよそ log n に抑えられます。

左の子の左に追加して崩れたときは右回転を 1 回、左の子の右に追加して崩れたときは左回転と右回転の 2 回 (二重回転) で直します。

この問に出る言葉