令和6年度 春期 午前 問6
アルゴリズム
2分木に関する問題
各ノードがもつデータを出力する再帰処理 f(ノード n)を定義した。この処理を,図の 2 分木の根(最上位のノード)から始めたときの出力はどれか。
〔f(ノード n)の定義〕1. ノード n の右に子ノード r があれば,f(ノード r)を実行 / 2. ノード n の左に子ノード l があれば,f(ノード l)を実行 / 3. 再帰処理 f(ノード r),f(ノード l)を未実行の子ノード,又は子ノードがなければ,ノード自身がもつデータを出力 / 4. 終了
〔図〕根は +。+ の左の子が A,右の子が ÷。÷ の左の子が ×,右の子が −。× の左の子が B,右の子が C。− の左の子が D,右の子が E。
- ア+÷−ED×CBA
- イABC×DE−÷+
- ウE−D÷C×B+A
- エED−CB×÷A+
答えと解説を見る
✓ これが正解エED−CB×÷A+
解説
右の子・左の子・自分の順に出力されます。
設問は、定義された再帰処理を根から始めたときの出力の並びを選ばせています。軸になるのは、定義の三つの手順を上から読んだときの順序です。右の子があれば先にそちらを処理し、次に左の子を処理し、どちらも済んでから自分のデータを出すので、右・左・自分の順に並びます。小さい部分木から確定させると迷いません。減算の記号を根とする部分は、E と D と記号自身の順になります。乗算の記号を根とする部分は、C と B と記号自身の順です。除算の記号を根とする部分は、右にある減算側を先に、次に左の乗算側を処理し、最後に自分を出すので、これらをつないだ並びになります。根では除算側を処理した後に A を出し、最後に加算の記号を出すため、ED−CB×÷A+ が得られます。ノードは 9 個なので、出力も 9 文字になることを確かめられます。
ほかの選択肢はなぜ違うのか
- ア+÷−ED×CBA:自分のデータを先に出してから、右と左をたどった場合の並びです。定義では出力が三つ目の手順に置かれているので、根に置かれた記号が先頭に来ることはありません。
- イABC×DE−÷+:左を先に、右を次に、最後に自分という順序でたどった並びです。演算子を後ろに置く書き方と同じ形になりますが、設問が定めた手順は左右が入れ替わっています。
- ウE−D÷C×B+A:右をたどり、自分を出し、その後で左をたどった場合の並びです。出力が二つの子の処理の間に挟まっており、三つ目の手順という位置と合いません。
出典:令和6年度 春期 応用情報技術者試験 午前 問6
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)