LeetCode:111 求二叉樹的最小深度
給定一個二叉樹,找出其最小深度。 最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。 說明: 葉子節點是指沒有子節點的節點。 示例: 給定二叉樹 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最小深度 2.
思路: 類似於求二叉樹的高度, 遞歸+層次遍歷方法
定義二叉樹:
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
遞歸法:
class Solution:
def minDepth(self, root: TreeNode) -> int:
if not root: return 0
left = self.minDepth(root.left)
right = self.minDepth(root.right)
# 去除 root+ left/right 特殊情況
return 1 + left+ right if (left==0 or right==0) else 1+min(left + right)
層次遍歷法:
def minDepth2(self, root: TreeNode) -> int:
if not root: return 0
cur_level=[root]
min_deep=1
while cur_level:
next_level=[]
for node in cur_level:
if node.left: next_level.append(node.left)
if node.right: next_level.append(node.right)
# 保證此時,纔是葉子節點
if not node.left and not node.right: return min_deep
min_deep +=1
cur_level = next_level