基本情報技術者 2025年 科目A 問03
問題文
図の木構造は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
🔒 解説は解答すると表示されます
二分探索木の値順序【午前解説】
正解の理由
二分探索木(BST)では、あるノードの左部分木の全ての値はそのノードの値より小さく、右部分木の全ての値はそのノードの値より大きいという条件を満たします。図の構造に当てはめると、根がa、左子がb(その下にdとe)、右子がc(その下にfとg)なので、左部分木全体はaより小さく、右部分木全体はaより大きくなります。さらに左部分木内ではd < b < e、右部分木内ではf < c < gが成り立ちます。これらをつなげると中順(in-order)走査の順序はd, b, e, a, f, c, gとなり、大小関係は です。したがって選択肢の中で該当するのは イ です。
解法ステップ
- 二分探索木の定義を確認:左部分木の値 < 自ノードの値 < 右部分木の値。
- 図の各部分木ごとに局所的な順序を決める:
- 左部分木(根b):左子d、右子e → 。
- 右部分木(根c):左子f、右子g → 。
- 左部分木全体はaより小さく、右部分木全体はaより大きいので、左右を結合:
- 結果の順序:。
- 各選択肢と比較して一致するものを選ぶ(イ)。
選択肢別の誤答解説
- ア: a < b < d < e < c < f < g
根aが左子bより小さいとするが、BSTでは左子を含む左部分木は根aより小さいはずで矛盾する(a < bは不適)。 - イ: d < b < e < a < f < c < g
中順走査から得られる正しい順序。図の配置とBSTの条件に一致する。 - ウ: d < e < f < g < b < c < a
左部分木内の順序が誤っている(dとeの関係はd < b < eであり、d < eとしてもbの位置が不正)。またaが最大とするが、右部分木がaより大きいことに反する。 - エ: g < f < c < e < d < b < a
ほとんどが逆順になっており、左・右の関係や部分木内の順序がすべて矛盾する。BSTの定義と合致しない。
よくある誤解
- 「左側のノード=必ず小さい」はノード単体だけを見て判断しがちで、部分木全体の関係(左部分木のすべてが根より小さい)を忘れると間違える。
- 中順走査(左→根→右)を知らないと、ノードの左右位置と大小関係の対応が分かりにくい。図の左右と大小を混同しやすい。
- 兄弟ノードの左右順が値の大小順と同一とは限らない(位置は値そのものを決めない)。必ず部分木の規則に基づいて評価する。
補足コラム
- 中順(in-order)走査は二分探索木の値を昇順で出力する性質があります。実装的には再帰で左→根→右をたどるだけで、出力配列が昇順であればその木はBSTの条件を満たしていることを確認できます。
- BSTの妥当性検査は、各ノードに対して許容範囲(min, max)を持たせる方法で効率よくO(n) で行えます。疑似コード:
def is_bst(node, low=-inf, high=inf):
if node is None:
return True
if not (low < node.val < high):
return False
return (is_bst(node.left, low, node.val) and
is_bst(node.right, node.val, high))
- 問題では値の重複がないと明示されているので不等号はすべて厳密(<)で扱えます。
FAQ
Q. 値の重複があったらどう判断する?
A. 重複を許すBSTの定義は実装によって異なります(例えば「左は <=、右は >」など)。問題文で重複を否定している場合は厳密な不等号で処理します。
A. 重複を許すBSTの定義は実装によって異なります(例えば「左は <=、右は >」など)。問題文で重複を否定している場合は厳密な不等号で処理します。
Q. 中順走査以外で解ける方法は?
A. 各部分木の範囲制約(範囲検査)を使って局所的不等関係を組み合わせても解けますが、中順走査が最も直感的で確実です。
A. 各部分木の範囲制約(範囲検査)を使って局所的不等関係を組み合わせても解けますが、中順走査が最も直感的で確実です。
Q. 図が左右反転して見えた場合は?
A. 図の左右が反転しているなら左部分木・右部分木の決め方が変わるだけなので、まず図中でどのノードが左子/右子かを確かめてから規則を適用してください。
A. 図の左右が反転しているなら左部分木・右部分木の決め方が変わるだけなので、まず図中でどのノードが左子/右子かを確かめてから規則を適用してください。
関連キーワード: 二分探索木, BST, 中順走査, in-order, ノード順序, 部分木の範囲検査

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

