↓快轉到主要內容
  1. LeetCode/

LeetCode 111: Minimum Depth of Binary Tree

·1 分鐘· ·
LeetCode Easy Tree Depth-First-Search Breadth-First-Search Binary-Tree
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: easy 第一次嘗試:2022-08-16

  • 提交紀錄:Wrong Answer → Accepted ×3 → Runtime Error → Accepted ×2

解題思路
#

跟最大深度不同,只有一邊有小孩時,空的那一邊不是葉子,不能拿來算(Tree 模板一):

  • 空樹:0。
  • 葉子:1。
  • 只有一邊:1 + 那一邊的最小深度。
  • 兩邊都有:1 + 兩邊的較小值。

我的嘗試
#

第一版直接寫 min(左, 右) + 1,只有一邊有小孩時把空的那邊(深度 0)當成最小值。例如 [3, 3](只有左小孩):答案 2,回傳 1。

正確解法
#

class Solution:
    def minDepth(self, root: Optional[TreeNode]) -> int:
        if not root:
            return 0
        if not root.left or not root.right:
            return 1 + self.minDepth(root.left or root.right)
        return 1 + min(self.minDepth(root.left), self.minDepth(root.right))

複雜度
#

時間 O(n),空間 O(h)。用 BFS 找到第一個葉子就停會更快。

要特別避免的錯誤
#

  • 缺一邊的小孩時,空的那邊深度是 0,但它不是葉子。

面試口說整理
#

最小深度要算到葉子。只有一邊有小孩時只能走那一邊,兩邊都有才取較小值,我用遞迴處理這三種情況。時間 O(n)。

相關文章

LeetCode 112: Path Sum
·1 分鐘
LeetCode Easy Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 112 解題筆記:往下走時把 targetSum 減掉目前的值,到葉子時剛好是 0(或等於葉子的值)就成立
LeetCode 100: Same Tree
·1 分鐘
LeetCode Easy Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 100 解題筆記:兩邊都是空的才相同;一邊空一邊不空就不同;都不空時比值再遞迴比左右
LeetCode 101: Symmetric Tree
·1 分鐘
LeetCode Easy Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 101 解題筆記:左子樹跟右子樹互為鏡像:外側跟外側比、內側跟內側比;比的是值,不是節點本身
LeetCode 104: Maximum Depth of Binary Tree
·1 分鐘
LeetCode Easy Tree Depth-First-Search Breadth-First-Search Binary-Tree
LeetCode 104 解題筆記:深度等於 1 加上左右子樹深度的較大值;空樹是 0
LeetCode 110: Balanced Binary Tree
·1 分鐘
LeetCode Easy Tree Depth-First-Search Binary-Tree
LeetCode 110 解題筆記:每一個節點的左右高度差都不能超過 1;後序回傳高度,不平衡時回傳 -1 一路傳上去
LeetCode 144: Binary Tree Preorder Traversal
·1 分鐘
LeetCode Easy Stack Tree Depth-First-Search Binary-Tree
LeetCode 144 解題筆記:迭代的前序遍歷,彈出就記錄,先推右小孩再推左小孩,左邊才會先處理