bfs解法:
当我们找到一个叶子节点时,直接返回这个叶子节点的深度。广度优先搜索的性质保证了最先搜索到的叶子节点的深度一定最小。
public int minDepth(TreeNode root) {
int res = 0;
if(root == null) return res;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
int size = queue.size();
for(;size > 0;size--){
TreeNode node = queue.poll();
if(node.left == null && node.right == null) return res+1; //当左右子树都为null是即为叶子节点
if(node.left !=null) queue.add(node.left);
if(node.right != null) queue.add(node.right);
}
res++;
}
return res;
}
dfs解法:
public int minDepth(TreeNode root) {
if (root == null) {
return 0;
}
// 计算左子树的深度
int left = minDepth(root.left);
// 计算右子树的深度
int right = minDepth(root.right);
// 如果左子树或右子树的深度不为 0,即存在一个子树,那么当前子树的最小深度就是该子树的深度+1
// 如果左子树和右子树的深度都不为 0,即左右子树都存在,那么当前子树的最小深度就是它们较小值+1
return (left == 0 || right == 0) ? left + right + 1 : Math.min(left, right) + 1;
}