1. 程式人生 > >【LeetCode 簡單題】118-二叉樹的最小深度

【LeetCode 簡單題】118-二叉樹的最小深度

題目描述:給定一個二叉樹,找出其最小深度。最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。

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

示例:

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

    3
   / \
  9  20
    /  \
   15   7

返回它的最小深度  2.

解法1。遞迴,是DFS做法,注意有的測試用例是左子樹為空,此時不能返回1(注意看題幹要求),所以要額外加左右子樹是否為空的判斷。

class Solution(object):
    def minDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if not root:
            return 0
        if not root.left:
            return self.minDepth(root.right)+1
        if not root.right:
            return self.minDepth(root.left)+1
        return min(self.minDepth(root.left), self.minDepth(root.right))+1

解法2。迭代,是BFS做法。

class Solution(object):
    def minDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if not root:
            return 0
        root.val = 1
        q = [root]
        while q:
            node = q.pop(0)
            if not node.left and not node.right:
            # 最後while迴圈返回的出口,就是葉子結點的值,記錄下的是到此處的深度
            # 因為肯定是深度最淺的葉子節點先被遍歷,所以此處返回的是最小深度
                return node.val    
            if node.left:
                node.left.val = node.val+1
                q.append(node.left)
            if node.right:
                node.right.val = node.val+1
                q.append(node.right)