アルゴリズムとプログラミング

基本情報技術者試験木構造」の問題

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:normal
次の 2 分木がある。各ノードは値・左の子・右の子をもつ(子がなければ空)。 根=500、500 の左の子=300、500 の右の子=800、300 の左の子=200、300 の右の子=400、800 の右の子=900(800 の左の子は空、200・400・900 の子はすべて空)。 この木に対し次の擬似言語(後順走査:左部分木→右部分木→節点の順に値を出力)を根から実行したとき、出力される値の並びはどれか。
○手続: postorder(ノード: n)
  if (n が 空)
    return
  endif
  postorder(n.左)
  postorder(n.右)
  nの値を出力
200 400 300 900 800 500
200 400 300 900 800 300 500
200 300 400 500 800 900
末尾が500
正解
200 400 300 900 800 500

後順では左・右の部分木をすべて出力してから節点を出すため、根 500 が必ず末尾に来る。たどると 200 400 300 900 800 500 となり エが正しい。

?選択肢ごとの解説

エ ○後順では左・右の部分木をすべて出力してから節点を出すため、根 500 が必ず末尾に来る。たどると 200 400 300 900 800 500 となり エが正しい。
ア ×節点 300 を余分に出力して 200 400 300 900 800 300 500 とした、各節点を一度だけ出力する原則を破った誤りである。
ウ ×中順走査(左→節点→右)の結果 200 300 400 500 800 900 であり、節点を中央に出した誤りである。
イ ×根が末尾に来ること自体は正しいが具体的な並びを示さず『末尾が500』と言葉で濁した、出力列を明示していない不適切な解答である。

くわしく

後順走査は『子をすべて処理してから親』という順序で、根が末尾に来る。これは部分木の評価結果を集めてから親で統合する分割統治的処理と対応する。

本番での押さえどころ

試験のコツ

後順は『根が末尾』を手掛かりに、各節点で左→右を出し切ってから自分を出す。

覚え方

後順=『自分が最後』と唱え、葉から根へ集約すると覚える。

よくある誤り

前順や中順と混同して根の出力位置を取り違えるミスや、左右の順を逆にするミスが多い。

アルゴリズムとプログラミングの他の問題

この問題を、AIの8-ways解説つきで。

基本情報技術者試験の演習を、一問ごとに「なぜ」まで。まずは無料で。

無料ではじめる →

ukamiru 過去問 · 基本情報技術者試験 · fe-b-algo-0116

【基本情報技術者試験】木構造の問題 — 解答・解説|ukamiru 過去問