层次遍历模板的应用之:111.二叉树的最小深度

题目链接:111.二叉树的最小深度

1、题目分析

最小深度和最大深度是刚好反着来的,注意一点:最小深度是跟节点到叶子节点的深度,如果根节点的左子树或者右子树为空,那么左右子树为空的时候根本不符合题目要求,因此必做一个筛选。两个方法:①递归②层次遍历

2、解题分析

  • 递归
    • 如果左子树为空就直接遍历右子树
    • 如果右子树为空就直接遍历左子树
    • 如果都不为空,比较两个取最小值+1即可
  • 遍历
    • BFS模板
    • 使用一个临时变量去记录深度
    • 如果一个节点的左右子树都为空,就返回当前深度

3、代码

# 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
        
        #递归法
        if not root.left:
            return 1+self.minDepth(root.right)
        if not root.right:
            return 1+self.minDepth(root.left)
        return 1+min(self.minDepth(root.left),self.minDepth(root.right))


        #层次遍历
        queue = collections.deque()
        queue.append(root)
        res=1
        while queue:
            size = len(queue)
            for i in range(size):
                item = queue.popleft()
                if item.left:
                    queue.append(item.left)
                if item.right:
                    queue.append(item.right)
                if not item.left and not item.right:
                    return res
            res+=1

总结:简单题,套用模板即可。

你可能感兴趣的:(Leetcode,树,二叉树,数据结构,算法,leetcode,dfs)