👌
104. Maximum Depth of Binary Tree
2分木の根が与えられたとき、その最大深度を返します。
2分木の最大深度とは、根ノードから最も遠い葉ノードまでの最長パスに含まれるノードの数です。
例1:
入力: root = [3,9,20,null,null,15,7]
出力: 3
例2:
入力: root = [1,null,2]
出力: 2
こちらのコードは、PHPで書かれた2分木の最大深度を求めるためのクラスです。以下で詳しく解説します。
- 2分木のノードを表すクラスです。
-
val
:ノードの値 -
left
:左の子ノード -
right
:右の子ノード - コンストラクタでノードを初期化します。
処理の流れ
-
基底条件:
- 入力の根ノード (
$root
) がnull
の場合、深度は0
です。
- 入力の根ノード (
-
再帰処理:
- 左部分木の深度を計算:
$leftDepth = $this->maxDepth($root->left);
- 右部分木の深度を計算:
$rightDepth = $this->maxDepth($root->right);
- 左部分木の深度を計算:
-
最大深度を計算:
- 左右の深度の大きい方を選び、
+1
して返します。 -
+1
は現在のノード自身をカウントしています。
- 左右の深度の大きい方を選び、
計算量
-
時間計算量: O(N)
- Nはノード数。すべてのノードを1回ずつ訪れるためです。
-
空間計算量: O(H)
- Hは木の高さ。再帰呼び出しの深さが木の高さに依存します。
実行例
入力:
3
/ \
9 20
/ \
15 7
$root = new TreeNode(3,
new TreeNode(9),
new TreeNode(20, new TreeNode(15), new TreeNode(7))
);
$solution = new Solution();
echo $solution->maxDepth($root); // 出力: 3
説明:
- 根ノード
3
から最も深いパス(3 -> 20 -> 7
など)の長さは3です。 - よって、出力は
3
になります。
Discussion