【きこうぞう(つりー)】

木構造(ツリー) とは?

💡 枝分かれする「家系図」のようなデータの階層構造
📌 このページのポイント
木構造(Binary Tree) 8 root 4 12 2 6 10 14 左 < 親 右 > 親 深さ 0 深さ 1 深さ 2 二分探索木: 探索・挿入・削除すべて O(log n) — 左の子 < 親 < 右の子
親ノードから子ノードに分岐する階層的なデータ構造
ひよこ ひよこ

木構造ってどんなもの?

ペンギン先生 ペンギン先生

階層的な関係を表すデータ構造だよ。会社の組織図や家系図と同じイメージ。一番上に「社長(ルート)」がいて、その下に「部長」「課長」「社員」と枝分かれしていく。パソコンのフォルダ構造もまさに木構造だよ。

ひよこ ひよこ

二分木って何が二分なの?

ペンギン先生 ペンギン先生

各ノード(節)が持てる子が最大2つだということだよ。「左の子」と「右の子」しか持てない。この制約があると探索が効率的にできて、特に「左の子は自分より小さい・右の子は自分より大きい」という二分探索木はデータの検索がO(log n)で速い。

ひよこ ひよこ

木を全部順番に見ていくにはどうするの?

ペンギン先生 ペンギン先生

「木の走査(トラバーサル)」と呼ばれる操作だよ。「深さ優先探索」は奥に進んでいってから戻ってくる方式、「幅優先探索」は同じ深さを全部見てから次の深さへ進む方式がある。どちらを使うかは問題によって使い分けるんだ。

ひよこ ひよこ

Webフロントエンドでも木構造って使うの?

ペンギン先生 ペンギン先生

HTML自体が木構造(DOM Tree)だよ。htmlの下にheadとbodyがあって、bodyの下にdivやpが並ぶ。ReactVue仮想DOMも木構造で、コンポーネントの親子関係が木のノードに対応する。CSSのセレクタが「親 > 子」で指定できるのも、DOMが木構造だからこそなんだ。

ひよこ ひよこ

B木とかB+木ってデータベースで使うって聞いたけど?

ペンギン先生 ペンギン先生

データベースインデックスはほぼB+木で実装されているよ。B+木は二分木よりノードの分岐数が多く(数百〜数千)、ディスクI/Oの回数を最小化できるんだ。100万レコードテーブルでもB+木なら3〜4回のディスクアクセスで目的のデータに到達できる。「なぜインデックスを貼ると検索が速くなるのか」の答えがB+木の構造にあるんだよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「木構造(ツリー)」って出てきたら「ルートから枝分かれする階層的なデータ構造」と思えばだいたいOK!
📖 おまけ:英語の意味
「Tree」 = 木・樹木
💬 図示すると木を逆さにしたような形になることから命名。根(Root)を上に描くか下に描くかは流派があるが、コンピュータ科学では根を上に書くことが多いよ
← 用語集にもどる