Swift教室 Swift と競技プログラミングの教室

21. Maximum Depth of Binary Tree

読了目安 約1分

Tree / LC 104 (Easy) — 二分木の最大の深さ。木の再帰の型を覚える。

この章の目次

問題

LeetCode 104. Maximum Depth of Binary Tree(Easy / カテゴリ: Tree)

二分木は、各ノードが左右最大 2 つの子を持つ木構造です。 その根 root が与えられるので、最大の深さを返します。 最大の深さとは、根から最も遠い(子を 1 つも持たないノード)までの経路上のノード数です。 空の木の深さは 0 です。

考え方

ヒント 1

木の問題の多くは「根に対する答えを、左右の部分木に対する答えから作る」再帰で解けます。 深さもこの形に当てはまります。

ヒント 2

空の木の深さは 0 です。 空でない木の深さは「1 + max(左の部分木の深さ, 右の部分木の深さ)」です。 この 2 行をそのまま関数にすれば完成です。

Swift 実装のポイント

  • TreeNode は参照型の class で定義します。子が無い場所は nil なので、引数の型は TreeNode? です。
  • guard let root = root else { return 0 } で空の木を最初に処理します。
  • 再帰は自分自身のメソッドを maxDepth(root.left) のように呼ぶだけです。
模範解答
Swift
class Solution {
    func maxDepth(_ root: TreeNode?) -> Int {
        guard let root = root else { return 0 }
        return 1 + max(maxDepth(root.left), maxDepth(root.right))
    }
}

計算量: O(N)。N はノード数で、各ノードをちょうど 1 回訪れます。