# 二叉树最小深度 - 层序遍历实现

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

** 说明:** 叶子节点是指没有子节点的节点。

示例 1:

img

输入: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

# 思路分析:

对于求二叉树最大深度这个规律比较好找 就是 一共有几层那么二叉树最大深度就是几,但是怎么用层序遍历去找它的最小深度呢?

结论

层序遍历,遇到的第一个叶子节点所在层就是最小深度

我们拿 下图 二叉树来举例

image-20240129153215819

其中的叶子节点分别是:4,3,7

现在我们再来领悟:遇到的第一个叶子节点所在层就是最小深度,这句话就清楚一些了,它遇到的第一个叶子节点就是最小深度

上面就是 层序遍历的结论那么结论有了些代码就容易多了。

# 代码实现:

class Solution {
    public int minDepth(TreeNode root) {
        if(root == null) return 0;
        LinkedList<TreeNode> s = new LinkedList<>();
        s.offer(root);
        // 记录最小深度的值
        int sun = 0;
        while(! s.isEmpty()) {
            int size = s.size();
            sun++;
            for(int i = 0; i < size; i++) {
                TreeNode poll = s.poll();
                // 判断如果 当前节点的 左右两边都没有 孩子了 说明 是个叶子节点那么就直接返回 最小深度值
                if(poll.left == null && poll.right == null)
                    return sun;
                if(poll.left != null)
                    s.offer(poll.left);
                if(poll.right != null)
                    s.offer(poll.right);
            }
        }
        return sun;
    }
}