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的左右节点都为空,则遍历到了最小深度,否则还要继续层序遍历过去。
这篇博客介绍了如何使用深度优先搜索(DFS)和广度优先搜索(BFS)两种方法来求解二叉树的最小深度。在DFS中,递归地检查左右子树,当遇到只有一侧子树的情况时返回该子树的深度加1。而在BFS中,通过队列进行层序遍历,直到找到叶子节点,返回当前深度。这两种方法都能有效地找出二叉树的最小深度。
1118

被折叠的 条评论
为什么被折叠?



