平成22年度 秋期 午前 問6
データ構造
節点に関する問題
節点 1,2,…,n をもつ木を表現するために,大きさ n の整数型配列 A[1],A[2],…,A[n] を用意して,節点 i の親の番号を A[i] に格納する。節点 k が根の場合は A[k]=0 とする。表に示す配列が表す木の葉の数は,幾つか。
| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| A[i] | 0 | 1 | 1 | 3 | 3 | 5 | 5 | 5 |
- ア1
- イ3
- ウ5
- エ7
答えと解説を見る
✓ これが正解ウ5
解説
配列の値に一度も現れない番号が葉で、5個です。
この配列は、節点の番号を添字にして、そこに親の番号を入れる形で木を表しています。ある節点が子をもつということは、その節点の番号がどこかの要素の値として現れているということです。裏を返せば、配列の値に一度も現れない番号の節点は子をもたない、つまり葉です。そこで値の並びを見て、現れる番号の種類を数えます。現れるのは0のほかに1と3と5の3種類で、0は根を表す印なので節点の番号ではありません。節点は全部で8個あり、子をもつのは3個ですから、残りの5個が葉になります。判定の軸は、数える対象を親の側にするか子をもたない側にするかと、根を表す0を節点の番号と取り違えないことです。
ほかの選択肢はなぜ違うのか
- ア1:親の欄が0になっている節点、つまり根だけを数えた値です。根は2つの子をもつ節点なので、子をもたない節点の個数としては数えられません。
- イ3:配列の値として現れる番号の種類を数えた値で、これは子をもつ側の節点の個数です。求めたいのは残りの側なので、節点の総数からこの個数を引く必要があります。
- エ7:節点の総数から根の1個だけを取り除いた値です。根のほかにも子をもつ節点が2個あるので、その分まで取り除かないと子をもたない節点の個数にはなりません。
出典:平成22年度 秋期 基本情報技術者試験 午前 問6(改変:原典の図表をテキストに書き起こした)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)