一、题目
给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说明:叶子节点是指没有子节点的节点。
二、思路:
1 深度优先搜索,前序访问,deep保存当前深度,minDeep保存最终结果
2 因此整体思路就是,访问root先deep++。
3 然后判断是否为叶子节点,是叶子节点就把当前的minDeep更新。(temp的作用是给minDeep赋初值,第一次是直接赋值,后面的是较小的赋值)
4 不是叶子节点,仅当存在左(右)孩子的时候再递归左(右)子树
三、代码
class Solution {
private int minDeep;
private boolean temp = false;
public void dfs(TreeNode root, int deep) {
deep++;
if (root.left == null && root.right == null) {
if (!this.temp) { //第一次到达叶子节点后改为true
this.minDeep = deep;
this.temp = true;
}
// 随后就是比大小
else this.minDeep = Math.min(deep, this.minDeep);
return;
}
if (root.left != null) dfs(root.left, deep);
if (root.right != null) dfs(root.right, deep);
return;
}
public int minDepth(TreeNode root) {
if (root == null) return 0;
int deep = 0;
dfs(root, deep);
System.out.println(this.minDeep);
return this.minDeep;
}
}