用語集に戻る
アルゴリズム初級

tree

tree

一言で言うと

枝分かれする階層構造を表すデータ構造、または同名の Linux コマンド。両方とも「根から枝へ」というイメージで使う。

もう少し詳しく

一言で言うと

枝分かれする階層構造を表すデータ構造、または同名の Linux コマンド。両方とも「根から枝へ」というイメージで使う。

詳細

「tree」はソフトウェアの世界で 2 つの意味を持ちます。1 つはデータ構造としての木で、ルート (根) から子ノードがぶら下がる階層型の集まりです。ファイルシステム、DOM、構文解析木、データベースのインデックス (B-tree) など、現場のあらゆる場所に登場します。

もう 1 つはLinux/macOS の tree コマンドで、ディレクトリ構造をテキストでビジュアル表示します。brew install tree でインストールできます。同じ「枝分かれ」の発想なので、データ構造の木が頭にあるとコマンドの出力もそのまま読めます。

具体例

データ構造としての木 (TypeScript)

type TreeNode = {
value: string;
children: TreeNode[];
};

const root: TreeNode = {
value: "root",
children: [
{ value: "src", children: [{ value: "index.ts", children: [] }] },
{ value: "package.json", children: [] },
],
};

// 深さ優先で全ノードを訪問
function walk(node: TreeNode, depth = 0) {
console.log(" ".repeat(depth) + node.value);
node.children.forEach((c) => walk(c, depth + 1));
}
walk(root);

tree コマンド

$ tree -L 2 -I "node_modules|dist"
.
├── package.json
├── src
│ ├── index.ts
│ └── utils
└── tests

よく使うオプションは次のとおりです。-L N で深さ制限、-I "pat" でパターン除外、-a で隠しファイルも表示、-d でディレクトリのみ表示、-J で JSON 出力。

使い分け / トレードオフ

データ構造の木はリスト (一直線) より検索が速い場面 (二分探索木、B-tree) で選びます。逆に挿入順序を保ちたい・全件走査が主な用途ならリストや配列のほうがシンプルです。

ディレクトリ可視化は GUI なら macOS Finder のリスト表示で代替できますが、CI ログや README に貼り付けるときは tree コマンドのテキスト出力が圧倒的に使いやすいです。

関連用語

  • [binary-tree](/glossary/binary-tree)

  • [recursion](/glossary/recursion)

  • [graph](/glossary/graph)

  • [directory](/glossary/directory)

  • [decisiontree](/glossary/decisiontree)

  • 関連する用語

    この用語を学べるコース

    この用語を実際に使ってみよう

    チョットデキルなら、5分のレッスンで実際にコードを書いて学べます。

    コース一覧を見る