正答3
解説
正解は3です。
AVL木は、すべてのノードで左右の部分木の高さの差が1以下に保たれる2分探索木です。
要素を追加して差が2になったノードがあれば、回転を行って平衡を回復します。
図の元の木は、根5の左に3(その左に2、右に4)、右に7(その左に6)がある形です。
【計算】
1を追加すると、5より小さく3より小さく2より小さいので、2の左の子になります。
この時点ではどのノードも高さの差が1以下で、回転は不要です。
0を追加すると、1より小さいので1の左の子になります。
ノード2は左の部分木の高さが2、右の部分木が空なので、差が2になり平衡が崩れます。
左の子の左側に追加された「左左型」なので、ノード2を中心に右回転を1回行います。
回転後は1が部分木の根となり、その左に0、右に2が付きます。
完成した木は、根5の左に3(左に1、右に4)、1の左に0・右に2、根の右に7(左に6)です。
【選択肢別解説】
1:× 図のアは根が3で、元の木の根5が右側へ移動しています。
今回の追加で不均衡になるのはノード2の部分木だけなので、根まで組み替える回転は起きません。
2:× 図のイは根が4で、左に2、右に6を配置した完全に組み直された木です。
AVL木の回転は不均衡になったノードの周辺だけを変えるので、元の構造から大きく離れたこの形にはなりません。
3:○ 図のウは根5の左に3、3の左に1(左に0、右に2)、3の右に4、根の右に7(左に6)を置いた形です。
ノード2での右回転の結果と一致し、各ノードの高さの差も1以下です。
4:× 図のエは左側の部分木はウと同じですが、根の右の部分木が6(右に7)に変わっています。
右側には要素を追加しておらず平衡も崩れていないので、7と6を組み替える理由はありません。
【ポイント】
AVL木の回転は、挿入位置から根へ向かって最初に不均衡になったノードで行います。
左左型と右右型は1回の回転、左右型と右左型は2回の回転(二重回転)で平衡を回復します。