【LeetCode 簡單題】118-二叉樹的最小深度
阿新 • • 發佈:2019-01-07
題目描述:給定一個二叉樹,找出其最小深度。最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。
說明: 葉子節點是指沒有子節點的節點。
示例:
給定二叉樹
[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)