104. 二叉樹的最大深度(LeetCode 題解)

題目描述:

給定一個二叉樹,找出其最大深度。

二叉樹的深度為根節點到最遠葉子節點的最長路徑上的節點數。

說明: 葉子節點是指沒有子節點的節點。

示例:

給定二叉樹 [3,9,20,null,null,15,7],

104. 二叉樹的最大深度(LeetCode 題解)

返回它的最大深度 3 。

樹的定義

首先,給出我們將要使用的樹的結點 TreeNode 的定義。

104. 二叉樹的最大深度(LeetCode 題解)

方法一、遞迴:

演算法

104. 二叉樹的最大深度(LeetCode 題解)

直觀的方法是透過遞迴來解決問題。在這裡,我們演示了 DFS(深度優先搜尋)策略的示例。

104. 二叉樹的最大深度(LeetCode 題解)

複雜度分析

時間複雜度:我們每個結點只訪問一次,因此時間複雜度為 O(N), 其中 N

是結點的數量。

空間複雜度:在最糟糕的情況下,樹是完全不平衡的,

例如

每個結點只剩下左子結點,遞迴將會被呼叫 N

次(樹的高度),因此保持呼叫棧的儲存將是 O(N)。但在最好的情況下(樹是完全平衡的),樹的高度將是 log⁡(N)。因此,在這種情況下的空間複雜度將是 O(log⁡(N))。

方法二、迭代:

我們還可以在棧的幫助下將上面的遞迴轉換為迭代。

我們的想法是使用 DFS 策略訪問每個結點,同時在每次訪問時更新最大深度。

所以我們從包含根結點且相應深度為 1 的棧開始。然後我們繼續迭代:將當前結點彈出棧並推入子

結點

。每一步都會更新深度。

104. 二叉樹的最大深度(LeetCode 題解)

複雜度分析

時間複雜度:O(N)。

空間複雜度:O(N)。