DFS
class Solution {
public int minDepth(TreeNode root) {
if(root == null) return 0;
int left_d = minDepth(root.left);
int right_d = minDepth(root.right);
if(root.left == null && root.right != null){
return right_d + 1;
}
if(root.left != null && root.right == null){
return left_d + 1;
}
int result = 1 + Math.min(left_d,right_d);
return result;
}
}
递归解决,node.left == null && node.right == null,则这两个子节点都返回0,那么母节点就是1了,可以挖到最底下,递归返回最小深度。
BFS
class Solution {
public int minDepth(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
if(root == null) return 0;
int depth = 0;
queue.add(root);
while(!queue.isEmpty()){
int size = queue.size();
depth++;
while(size-- > 0){
TreeNode node = queue.poll();
if(node.left == null && node.right == null) return depth;
if(node.left != null) queue.add(node.left);
if(node.right != null) queue.add(node.right);
}
}
return depth;
}
}
遍历到node的左右节点都为空,则遍历到了最小深度,否则还要继续层序遍历过去。