Java 题解 | #牛群的最短路径#
牛群的最短路径
https://www.nowcoder.com/practice/c07472106bfe430b8e2f55125d817358
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整型
*/
private int minDepth = Integer.MAX_VALUE;
public void dfs(TreeNode root, int depth) {
if (root.left == null && root.right == null) {
minDepth = Math.min(minDepth, depth);
return;
}
if (root.left != null) {
dfs(root.left, depth + 1);
}
if (root.right != null) {
dfs(root.right, depth + 1);
}
}
public int minDepth(TreeNode root) {
if (root == null) {
return 0;
}
dfs(root, 1);
return minDepth;
}
}
该题考察的主要知识点有:
- 二叉树(Binary Tree):二叉树是一种特殊的树结构,其中每个节点最多有两个子节点。二叉树可以为空树(没有节点),也可以是非空树,其中一个节点作为根节点,其余节点分别形成根节点的左子树和右子树。
- 深度优先搜索(Depth First Search,DFS):深度优先搜索是一种遍历或搜索树或图的算法。在深度优先搜索中,从起始节点开始,沿着路径尽可能深入树或图,直到达到叶子节点或无法继续前进的节点,然后回溯到前一个节点,继续探索其他路径。
- 最小深度(Minimum Depth):指从根节点到最近的叶子节点的最短路径上的节点数量。注意,这里的最小深度定义并不是树的高度,因为它要求的是从根节点到叶子节点的路径上的节点数量。
代码的解释大纲如下:
- 创建一个全局变量
minDepth,用于保存计算得到的最小深度,默认值为最大整数值。 - 定义一个深度优先搜索的函数
dfs,传入当前节点root和当前的深度depth。 - 如果当前节点既没有左子节点也没有右子节点,说明当前节点是叶子节点,更新
minDepth为当前深度和minDepth中的较小值,并返回。 - 如果当前节点有左子节点,则递归调用
dfs函数,传入左子节点和深度增加1后的值。 - 如果当前节点有右子节点,则递归调用
dfs函数,传入右子节点和深度增加1后的值。 - 定义最小深度的函数
minDepth,传入根节点root。 - 判断根节点是否为空,如果为空,则返回0作为最小深度。
- 调用深度优先搜索的函数
dfs,传入根节点和初始深度1。 - 返回最小深度
minDepth作为结果。
