给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:2
示例 2:
输入:root = [2,null,3,null,4,null,5,null,6]
输出:5
提示:
- 树中节点数的范围在 [0, 105] 内
- -1000 <= Node.val <= 1000
class Solution:
def minDepth(self, root: TreeNode) -> int:
if not root:
return 0
queue = [root]
depth = 1
while queue:
tmp_length = len(queue)
for i in range(tmp_length):
tmp_node = queue.pop(0)
if not tmp_node.left and not tmp_node.right:
return depth
if tmp_node.left:
queue.append(tmp_node.left)
if tmp_node.right:
queue.append(tmp_node.right)
depth += 1
- 时间复杂度:$O(logn)$
- 空间复杂度:$O(1)$
class Solution:
def minDepth(self, root: TreeNode) -> int:
if not root:
return 0
self.min_depth = float('inf')
self.backtrack(root, 0)
return self.min_depth
def backtrack(self, root, cur_depth):
if not root.left and not root.right:
self.min_depth = min(self.min_depth, cur_depth+1)
return
if root.left:
self.backtrack(root.left, cur_depth+1)
if root.right:
self.backtrack(root.right, cur_depth+1)