import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类
     * @return int整型
     */
// 全局变量,记录最小深度
    int min = Integer.MAX_VALUE;

    /**
     * 深度优先搜索遍历二叉树,同时记录到达叶子节点的最小深度
     *
     * @param root 二叉树的根节点
     * @param level 当前节点的深度
     */
    public void dfs(TreeNode root, int level) {
        // 如果当前节点为空,直接返回
        if (root == null)
            return;

        // 如果当前节点是叶子节点,并且深度小于最小深度,则更新最小深度的值
        if (root.left == null && root.right == null) {
            if (level < min)
                min = level;
        }

        // 递归遍历左子树和右子树,深度加一
        dfs(root.left, level + 1);
        dfs(root.right, level + 1);
    }

    /**
     * 计算二叉树的最小深度
     *
     * @param root 二叉树的根节点
     * @return 最小深度
     */
    public int minDepth(TreeNode root) {
        // 如果根节点为空,最小深度为0
        if (root == null)
            return 0;

        // 递归遍历二叉树,计算最小深度
        dfs(root, 1);

        return min;
    }
}

代码用Java编写

该题考察的知识点:二叉树、遍历、DFS、叶子结点。

此代码实现了一个方法minDepth,用于计算二叉树的最小深度。具体实现步骤如下:

  1. 定义一个全局变量min,表示最小深度,默认值为Integer.MAX_VALUE
  2. 实现dfs方法,该方法用于深度优先遍历二叉树,并记录到达叶子节点的最小深度。
  3. dfs方法中,如果当前节点为空,直接返回。如果当前节点是叶子节点,并且深度小于最小深度min,则更新min的值。然后递归遍历左子树和右子树,将深度加一。
  4. 实现minDepth方法,该方法用于计算二叉树的最小深度。
  5. minDepth方法中,首先判断根节点是否为空,若为空,则最小深度为0。然后通过调用dfs方法,计算最小深度。
  6. 返回最小深度min作为结果。

整个过程使用深度优先搜索(DFS)来遍历二叉树,同时记录到达叶子节点的最小深度。最后返回计算得到的最小深度。