二分木の高さ — 木の深さの計算方法

再帰的および反復的に二分木の高さ(深さ)を計算する方法を学びます。木の用語における高さ、深さ、レベルの違いを理解します。

Properties

詳細な説明

二分木の高さの計算

二分木の高さは、ルートからリーフノードまでの最長パス上のエッジ数です。空の木の高さは 0、単一ノードの木の高さは 1(ノードを数える場合)または 0(エッジを数える場合)です。ここではノードを数えます。

再帰的な式

HEIGHT(node):
  if node is NULL: return 0
  left_height  = HEIGHT(node.left)
  right_height = HEIGHT(node.right)
  return 1 + max(left_height, right_height)

        4          高さ = 3
       / \
      2   6        左部分木の高さ = 2
     /             右部分木の高さ = 1
    1

HEIGHT(4) = 1 + max(HEIGHT(2), HEIGHT(6))
          = 1 + max(2, 1)
          = 3

高さ vs 深さ vs レベル

これらの用語はよく混同されます:

用語 定義
ノードの高さ そのノードからリーフまでの最長パス
ノードの深さ ルートからそのノードまでのパス長
レベル 深さ + 1(ルートはレベル 1)
木の高さ ルートノードの高さ

BFS を使用した反復的アプローチ

レベル順走査を使用して反復的に高さを計算できます — レベル数が高さに等しい。

性能への影響

木の高さは BST 操作(探索、挿入、削除)の最悪ケースの時間計算量を直接決定します。バランスした木の高さは O(log n)、退化木の高さは O(n) です。これが自己平衡木(AVL、Red-Black)が重要な理由です。

ユースケース

高さの計算は多くの木アルゴリズムの構成要素です:木がバランスしているかのチェック、木の直径の計算、コーディングチャレンジの最大深度の決定、本番システムにおけるツリーベースのデータ構造の性能特性の分析。

試してみる — Binary Tree Visualizer

フルツールを開く