---
title: "111. Minimum Depth of Binary Tree"
url: "https://laigary.com/interview/coding/111-minimum-depth-of-binary-tree"
type: "note"
section: "coding"
date: "2023-01-29"
updated: "2025-03-24"
tags: ["Tree"]
---

# 111. Minimum Depth of Binary Tree

[111\. Minimum Depth of Binary Tree](https://leetcode.com/problems/minimum-depth-of-binary-tree/)

## DFS

```python
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def minDepth(self, root: TreeNode) -> int:
        if not root:
            return 0
        if not root.left:
            return 1 + self.minDepth(root.right)
        if not root.right:
            return 1 + self.minDepth(root.left)
        
        left = self.minDepth(root.left)
        right = self.minDepth(root.right)
        return 1 + min(left, right)
```

## BFS

```python
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def minDepth(self, root: TreeNode) -> int:
        if not root:
            return 0
        
        queue = deque([root])  # 初始化隊列，將根節點加入隊列
        level = 0
        
        while queue:
            level += 1  # 每次進入一層，level 加 1
            size = len(queue)  # 當前層的節點數量
            
            for _ in range(size):
                node = queue.popleft()  # 從隊列中移除節點
                # 如果節點是葉子節點，返回當前層的深度
                if not node.left and not node.right:
                    return level
                
                # 否則將左右子樹加入隊列
                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)
        
        return level

```
