過去問解きまくり研究所 ホーム

平成26年度 春期 午前 問6

データ構造

2分木に関する問題

2 分木の各ノードがもつ記号を出力する再帰的なプログラム Proc(n) の定義は,次のとおりである。このプログラムを,図の 2 分木の根(最上位のノード)に適用したときの出力はどれか。

〔プログラム〕

Proc(n) {
  n に左の子 l があれば Proc(l) を呼び出す。
  n に右の子 r があれば Proc(r) を呼び出す。
  n の記号を出力して終了する。
}

〔2 分木〕字に書き起こしたもの(上が根)

            +
          /  \
        a       *
              /  \
            −       d
          /  \
        b       c
答えと解説を見る

✓ これが正解ウabc−d*+

解説

左と右を先に出し自分を最後に出す順です。

この手続は、まず左の子を処理し、次に右の子を処理し、最後に自分の記号を出力します。出力する行がいちばん後ろに置かれているので、どのノードも両方の子が済んでから字を出します。この順序を帰りがけ順と呼びます。判定の軸は一つで、自分を出力する位置が子の処理より前か、間か、後かという点だけです。図の 2 分木にこの順で当てると、左に下がった葉から出力が始まり、次に右側の枝の中をさらに左から下りていき、それぞれの親は子が出尽くした後に現れます。得られる並びは a b c − d * + となります。演算子が二つの項の後ろに置かれる形なので、後置記法そのものです。並びを後ろから組み立て直すと、もとの 2 分木が表している式に戻ります。

ほかの選択肢はなぜ違うのか

出典:平成26年度 春期 基本情報技術者試験 午前 問6(改変:原典の図表をテキストに書き起こした)

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)