完全二分木 vs 全二分木 vs 完璧二分木

完全(complete)二分木、全(full)二分木、完璧(perfect)二分木の違いを学びます。構造的な性質、ノード数の公式、各タイプが実際に使用される場面を理解します。

Properties

詳細な説明

二分木の種類

二分木にはノードの配置方法を記述するいくつかの構造的分類があります。

全二分木(Full Binary Tree)

すべてのノードが 0 または 2 の子 を持つ — 子がちょうど 1 つのノードはありません。

性質:

  • リーフノード数 = 内部ノード数 + 1
  • 総ノード数は常に奇数

完全二分木(Complete Binary Tree)

最後のレベルを除くすべてのレベルが完全に埋められ、最後のレベルは左から右に埋められます。

性質:

  • 高さ = floor(log2(n))
  • 配列に効率的に格納可能:インデックス i のノードに対し、左の子は 2i+1、右の子は 2i+2
  • 二分ヒープは常に完全二分木

完璧二分木(Perfect Binary Tree)

すべてのレベルが完全に埋められている — 全二分木かつ完全二分木。すべてのリーフノードが同じレベル。

性質:

  • 総ノード数 = 2^h - 1(h はノードを数えた高さ)
  • リーフノード数 = 2^(h-1)
  • すべてのリーフが同じ深さ
  • 最も稀な形態 — 特定のノード数(1, 3, 7, 15, 31, ...)でのみ存在

退化木(Pathological Tree)

すべての内部ノードがちょうど 1 つの子を持つ — 実質的に連結リスト。高さがノード数に等しく、すべての木操作が O(n) に劣化します。

ユースケース

完全二分木は優先度キュー、ヒープソート、Dijkstra のアルゴリズムで使用される二分ヒープの基礎です。全二分木はデータ圧縮のハフマン符号化に現れます。完璧二分木は平衡木の理論的最良ケースを表し、トーナメント形式のアルゴリズムで使用されます。

試してみる — Binary Tree Visualizer

フルツールを開く