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

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

アルゴリズムとプログラミングアルゴリズムとプログラミング計算問題難易度:hard
次の 2 分木がある。各ノードは値・左の子・右の子をもつ(子がなければ空)。 根=A、A の左の子=B、A の右の子=C、B の左の子=D、C の左の子=E、C の右の子=F、E の左の子=G(D・F・G の子はすべて空、B の右の子は空、E の右の子は空)。 次の擬似言語は木の高さを、根から最も遠い葉までに含まれる節点の数として返す(空の木は 0)。この木の根 A に対して実行したとき、戻り値はどれか。
○整数型: height(ノード: n)
  if (n が 空)
    return 0
  endif
  整数型: hl ← height(n.左)
  整数型: hr ← height(n.右)
  if (hl > hr)
    return hl + 1
  else
    return hr + 1
  endif
4節点
3段
7(全ノード数)
14
正解
4節点

height は左右の高さの大きい方に 1 を足して返す。最長経路 A→C→E→G は 4 節点で、これが最大となるため戻り値は 4 となり ウが正しい。

?選択肢ごとの解説

ウ ○height は左右の高さの大きい方に 1 を足して返す。最長経路 A→C→E→G は 4 節点で、これが最大となるため戻り値は 4 となり ウが正しい。
ア ×A→B→D の経路(3 節点)だけを見て 3 段とした、より深い右側 A→C→E→G を見落とした誤りである。
イ ×木全体の節点数 7 を高さと取り違えた、高さと総ノード数を混同した誤りである。
エ ×節点ラベルや無関係な数値に引きずられて 14 とした、定義から外れた過大評価である。

くわしく

木の高さは『根から最も遠い葉までの節点数(または辺数)』で定義され、左右部分木の高さの最大値に親 1 を加えて求める。最長経路がどの枝にあるかを見極めることが核心である。

本番での押さえどころ

試験のコツ

各葉までの節点数を枝ごとに数え、その最大値を高さとする。

覚え方

『高さ=いちばん深い葉までの段数』と覚え、最長の枝を探す。

よくある誤り

高さを総ノード数と混同したり、より浅い枝だけを見て最長経路を取り違えるミスが多い。

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

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

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

無料ではじめる →

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

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