111. Minimum Depth of Binary Tree

111. Minimum Depth of Binary Tree

DFS

# 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

# 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