木構造は、データを親と子の関係でつないだ形です。図では丸と線で描かれますが、プログラムの中では配列になっています。図の言葉と、その配列の読み方を、丸が6つの小さな木で確かめます。
期間限定クーポンPR|Udemy の講座科目B オリジナル模試 3回分・60問42%OFF 1,500円第2部 定番処理の型 全26回A11木構造一覧を開く
A1-1トレース表の書き方A1-2繰返しのトレースA1-3配列のトレースA2-1配列を全部見るA2-2最大・最小を見つけるA2-3探す(線形探索)A2-4入れる・消すA3-12次元配列の走査A3-22次元配列の集計A4-1文字列を1文字ずつA4-2文字列照合A5-1交換して並べるA5-2挿入ソートA6分割して並べるA7-12分探索A7-2ハッシュ表探索A8-1再帰とはA8-2再帰のトレースA9スタックとキューA10-1リストを読むA10-2リストの挿入と削除A11木構造A12木の巡回A13グラフA14AI・データを題材にしたプログラムA15コントロールブレーク処理
この回の内容を動画で見る
次のページで講義の目次と無料の講義を見られます。受講ボタンとクーポンコードもそこにあります。
この回の内容を動画で見る
解くための再現性が身につく講義29本小テスト86問模試3回分IT資格の森で見る
講義「木構造」(全6分37秒)は、IT資格の森(月額1,280円)の会員向けです。科目Bは、1行ずつ値を追うアニメの講義と、講義ごとの小テスト、本番と同じ形の模擬試験がそろっています。
木構造とは ── 親と子を、線でつないだ形
木構造は、節(せつ)と、節どうしを結ぶ線=枝でできています。図では節を丸で描くのがふつうです。下の図では箱で描き、節を区別するために 1 から 6 の番号(節番号)を付けました。
6つの節でできた木
箱1つ=節。太い数字=節番号 / 箱と箱を結ぶ線=枝(線の上側が親。矢じりは親の側に付けてあります) / 点線の箱=葉(子のない節) / 色の付いた箱=子のある節
上が親、下が子
根深さ 01子は 2 と 3
根でも葉でもない深さ 12親は 1
子は 4 と 5
葉深さ 24親は 2
子はいない
葉深さ 25親は 2
子はいない
根でも葉でもない深さ 13親は 1
子は 6 だけ
葉深さ 26親は 3
子はいない
枝で結ばれた2つの節のうち、上を親、下を子と呼びます。節2 は、節1 から見れば子で、節4 から見れば親です。木の言葉は、あと3つです。
| 言葉 | 意味 |
|---|---|
| 根(ね) | 親のない節。いちばん上に1つだけあります。図では節1 |
| 葉(は) | 子のない節。図では節4・節5・節6 |
| 深さ | 根からその節まで、枝を何本たどるか。節1 は 0、節2 と節3 は 1、節4〜節6 は 2 |
2分木 ── 子は2つまで。左と右を区別する
どの節も子が2つ以下の木を、2分木といいます。上の木は、節1 と節2 の子が2つ、節3 の子が1つ、節4〜節6 の子が0なので、2分木です。
2分木では、2つの子を左の子・右の子と呼び分けます。節1 なら、左の子が節2、右の子が節3 です。子が1つだけの節では、その子を左右どちらとするかを出題が決めます。上の木では、節3 のただ1つの子(節6)を左の子としました。
(基本情報技術者試験 科目B サンプル問題 問9 の図の注記)
注記2 子の節が一つの場合は,左の子の節とする。
2分木を配列で表す ── tree[n] は、節 n の子の番号
丸と線の図は、そのままではプログラムで扱えません。そこで、節ごとに「子の節番号」を書き並べて配列にします。上の木なら、こうなります。
大域: 整数型配列の配列: tree ← {{2, 3}, {4, 5}, {6}, {}, {}, {}}
tree は、要素の1つ1つが配列になっている配列です。tree の n 番目の要素 tree[n] に、節 n の子の節番号が、左の子・右の子の順に入っています。子のない節のところは {}(要素数0の配列)です。大域: は、どの手続からもこの配列を使える、という印です。
配列 tree と、図の木は同じもの
点線の箱=中身が {}(要素数0の配列)=葉 / 色の付いた箱=子の番号が入っている
プログラムの中 ── 配列 tree(要素が6つ)
1{2, 3}
2{4, 5}
3{6}
4{}
5{}
6{}
枡の上の数字が要素番号で、そのまま節番号です。3番目の枡 {6} は「節3 の子は節6 の1つ」、4番目の枡 {} は「節4 に子はいない」。
図に戻すと ── 箱の太字が、その節の tree[n]
節1tree[1]{2, 3}左の子は 2
右の子は 3
節2tree[2]{4, 5}左の子は 4
右の子は 5
節4tree[4]{}子はいない
節5tree[5]{}子はいない
節3tree[3]{6}左の子は 6
右の子はいない
節6tree[6]{}子はいない
木を扱うプログラムは、この配列から次の3つを読み取ります。
| 書き方 | 読み取れること |
|---|---|
tree[n]の要素数 |
節 n の子の数。0 なら、節 n は葉です。tree[3]の要素数 は 1、tree[4]の要素数 は 0 |
tree[n][1] |
節 n の左の子の節番号。tree[1][1] は 2 |
tree[n][2] |
節 n の右の子の節番号。tree[1][2] は 3。子が2つの節にだけあります(tree[3] は {6} で要素が1つなので、tree[3][2] はありません) |
tree[1][2] のように [ ] が2つ続くときは、左から順に読みます。tree[1] が {2, 3}、その2番目なので 3 です。
(基本情報技術者試験 科目B サンプル問題 問9)
配列tree の要素は,対応する節の子の節番号を,左の子,右の子の順に格納した配列である。
14個の節をもつ2分木を、上と同じ持ち方で配列 tree にした出題です(サンプル問題 問9の解説)。
配列だけを見て、根から葉まで降りる
図を見ずに、配列 tree だけで木の上を親から子へ移ってみます。次の手続 goLeft は、根から始めて左の子へ、また左の子へと降りていき、通った節の番号を順に出力します。根の節番号 1 は、n ← 1 とプログラムに直接書いてあります。
大域: 整数型配列の配列: tree ← {{2, 3}, {4, 5}, {6}, {}, {}, {}}
○goLeft()
整数型: n ← 1
while (tree[n]の要素数 が 0 と等しくない)
nを出力
n ← tree[n][1]
endwhile
nを出力
当サイトで作った例です。
goLeft を呼び出すと、1,2,4 の順に出力されます。
n は、いまいる節の番号です。while の条件は「節 n に子がいるあいだ」。子がいれば、自分の番号を出力してから n ← tree[n][1] で n を左の子の番号に書き換えます。「子へ1つ降りる」は、プログラムでは「n に子の節番号を入れる」と書かれます。
子が1つだけの節でも、その子は tree[n] の1番目に入っています。だから、子がいるかぎり tree[n][1] で必ず降りられます。
goLeft を1行ずつ動かす
当サイトオリジナルの例題
ループ開始前
大域の配列 tree(n 番目が、節 n の子の番号)
いま計算していること
変数の状態
出力
トレース表(進めると1行ずつ積み上がります)
配列から子の数と子の番号の2つを読むだけで、根から葉まで降りられました。降りた回数は2回で、着いた節4 の深さ 2 と同じです。右の子 tree[n][2] も使って、すべての節を順にたどるのが A12 木の巡回 です。
次に読む
| A12 | 木の巡回 ─ 先行順・中間順・後行順 |
| 問9 | サンプル問題 問9の解説 ─ 配列 tree で持った2分木をたどる |
| 問15 | サンプル問題 問15の解説 ─ 根・子・葉の言葉だけで読む木 |
| 目次 | 基本情報技術者試験 科目B 攻略ガイド |
この記事で引用した資料
- 情報処理技術者試験 試験要綱 Ver5.6(2026年7月6日)
- 基本情報技術者試験 シラバス Ver9.2(2026年1月8日)
- 基本情報技術者試験 科目B サンプル問題(2022年12月26日公開)
いずれも独立行政法人情報処理推進機構(IPA)が公表したものです。IPAは公表済みの試験問題について、教育目的での使用に許諾および使用料を不要としていますが、著作権は放棄していません。本記事では、引用した箇所の文言を改変していません(省略や補いがある場合は、その場に明記しています)。
本文の例題(6つの節の木と手続 goLeft)は当サイトのオリジナルです。


