給定一個二叉樹,找出其最小深度。
最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。
說明:?葉子節點是指沒有子節點的節點。
示例:
給定二叉樹?[3,9,20,null,null,15,7],
返回它的最小深度 2.
思路:
后序遍歷(左右中)
遞歸
注意:最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。注意是葉子節點。
左右孩子都是None的節點是葉子結點。
先確定遞歸的終止條件:遇到空節點,此時高度為0,return 0
確定遞歸的單層邏輯:
【左】獲取 左子樹的最小高度
【右】獲取 右子樹的最小高度
【中】【注意這里和最大高度不同點:最大高度就是取左右子樹的最大值,但是這里不能這樣,如果左邊為None,右邊有值,那么就 return 1+右邊子樹的最小高度
同理,如果左子樹不為空,右子樹為空,那么return 1+左子樹最小高度
剩下一種情況:左右子樹都不為空,return 1+min(左子樹最小高度,右子樹最小高度)
最后 return result】
代碼:
# 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: Optional[TreeNode]) -> int:return self.getDepth(root)def getDepth(self, node):if node is None:return 0leftDepth = self.getDepth(node.left)rightDepth = self.getDepth(node.right)if node.left is None and node.right is not None:return 1 + rightDepthif node.left is not None and node.right is None:return 1 + leftDepthresult = 1 + min(leftDepth, rightDepth)return result