科目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 の公開問題。図・数式・下線などはテキストに直して掲載。解説は当サイト作成)
解説に誤りを見つけたら、解説の誤りを報告してください。
答えと解説を見る
正解:ウ
覚える知識
2分木の巡回順序(通りがけ順)
通りがけ順(中間順)は、左部分木→節→右部分木の順に訪問する巡回方法。
この問題で必要なこと
左の部分木をたどる→自分を出力→右の部分木をたどる、の順なので通りがけ順(中間順)になる。最も左の葉 8 から 8,4,9,2,10,5,11,1,12,6,13,3,14,7 と出力される。節 7 は子が 14 だけなので 14→7 の順。正解はウ。
ひっかけ
番号順(ア)、行きがけ順(イ)、帰りがけ順(エ)と、出力する位置の違う巡回順を並べて取り違えを誘う。