科目B

基本情報技術者試験 科目B サンプル問題セット(2022年12月公表) 問9

次の記述中の に入れる正しい答えを,解答群の中から選べ。ここで,配列の要素番号は 1 から始まる。 手続 order は,図の 2 分木の,引数で指定した節を根とする部分木をたどりながら,全ての節番号を出力する。大域の配列 tree が図の 2 分木を表している。配列 tree の要素は,対応する節の子の節番号を,左の子,右の子の順に格納した配列である。例えば,配列 tree の要素番号 1 の要素は,節番号 1 の子の節番号から成る配列であり,左の子の節番号 2,右の子の節番号 3 を配列{2,3}として格納する。 手続 order を order(1)として呼び出すと, の順に出力される。 〔図〕2 分木(○の中に節番号) 節 1 の子: 左 2,右 3 節 2 の子: 左 4,右 5 節 3 の子: 左 6,右 7 節 4 の子: 左 8,右 9 節 5 の子: 左 10,右 11 節 6 の子: 左 12,右 13 節 7 の子: 左 14(一つだけ) 節 8~14 は子なし 注記 1 ○の中の値は節番号である。 注記 2 子の節が一つの場合は,左の子の節とする。 図 プログラムが扱う 2 分木 〔プログラム〕
大域: 整数型配列の配列: tree ← {{2, 3}, {4, 5}, {6, 7}, {8, 9},
                      {10, 11}, {12, 13}, {14}, {}, {}, {},
                      {}, {}, {}, {}}  // {}は要素数0の配列

○order(整数型: n)
  if (tree[n]の要素数 が 2 と等しい)
    order(tree[n][1])
    nを出力
    order(tree[n][2])
  elseif (tree[n]の要素数 が 1 と等しい)
    order(tree[n][1])
    nを出力
  else
    nを出力
  endif
答えを選ぶ

出典:基本情報技術者試験 科目B サンプル問題セット(2022年12月公表) 問9(問題文は IPA の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)

科目Bの解き方と全問の一覧

解説に誤りを見つけたら、解説の誤りを報告してください。

答えと解説を見る

正解:ウ

覚える知識

2分木の巡回順序(通りがけ順)

通りがけ順(中間順)は、左部分木→節→右部分木の順に訪問する巡回方法。

この問題で必要なこと

左の部分木をたどる→自分を出力→右の部分木をたどる、の順なので通りがけ順(中間順)になる。最も左の葉 8 から 8,4,9,2,10,5,11,1,12,6,13,3,14,7 と出力される。節 7 は子が 14 だけなので 14→7 の順。正解はウ。

ひっかけ

番号順(ア)、行きがけ順(イ)、帰りがけ順(エ)と、出力する位置の違う巡回順を並べて取り違えを誘う。