111 求二叉樹的最小深度

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章