メインコンテンツへ
アルゴリズムとプログラミング

図の木構造は2分探索木である。a〜gの値の大小関係として、適切なものはどれか。ここで、a〜gの値は重複しないものとする。

ア.a<b<d<e<c<f<g
イ.d<b<e<a<f<c<g正解
ウ.d<e<f<g<b<c<a
エ.g<f<c<e<d<b<a

解説

二分探索木は「左の子は親より小さく、右の子は親より大きい」を全ノードで守る木。中順巡回(左→自分→右)すると魔法のように昇順が出てくる!

なぜ イ が正解か

根をaとする完全二分木(a が根、b/c が第2層、d/e/f/g が葉)で考えると、b は a の左子なので b<a、c は右子なので a<c。さらに d<b<e(b の左右)、f<c<g(c の左右)。加えて d, e は a の左部分木全体に属するので e<a、f は a の右部分木なので a<f。これを繋げると d<b<e<a<f<c<g となり、イが正解。

なぜ ア は間違いか

a<b と書いているが、b は a の左の子なので b<a でなければならない。左右を丸ごと入れ替えた「逆BST」ならアでも正しくなるが、それは普通の二分探索木ではない。

なぜ ウ は間違いか

c<a となっているが c は a の右の子なので a<c のはず。根 a が最大値になる構造はあり得るが、それは最大ヒープであってBSTではない——「木」に見えても役職が全然違う。

なぜ エ は間違いか

g<f<c<…<a と完全に降順になっており、木全体を「大きい値ほど左・小さい値ほど右」に配置した逆BSTの順序。鏡に映したBSTを採点会場に持ってきた感じ。

出典: 基本情報技術者試験 令和7年 公開問題