题目描述
求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。
Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.
思路
面试树结构一般考虑dfs和bfs,此题要求深度所以用dfs。
- 创建list来存储叶子结点的深度,若根节点为空,则直接返回0,若不为空,则depth初始值设为1,从根结点开始dfs;
- 若发现叶子结点则将其深度存在list中,若不是叶子结点则继续遍历其左右子树,同时深度depth+1;
- 返回list中最小的数。
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类
* @return int整型
*/
public int run (TreeNode root) {
ArrayList<Integer> list = new ArrayList<>();
if(root == null) return 0;
dfs(root,1,list);
int min = Integer.MAX_VALUE;
for(int s : list){
if(s < min)
min = s;
}
return min;
}
public void dfs (TreeNode root,int depth,ArrayList<Integer> list){
if(root.left == null && root.right == null){
list.add(depth);
}
if(root.left != null){
dfs(root.left,depth+1,list);
}
if(root.right != null){
dfs(root.right,depth+1,list);
}
}
}