- 方法一 当检测到有结点的左右子节点都为null的时候,则这个结点的深度就是二叉树的最小深度
- 因为是层序遍历,使用队列的方法,一层一层地进行判断处理。
- 方法二 也可以直接调用api minDepth,注意:调用的过程中,处理的是root.left 或者 root.right 的深度,没有记录root结点,所以在使用的时候,要进行+1操作。
class Solution {
public int minDepth(TreeNode root){
if(root == null) return 0;
Queue<TreeNode> que = new LinkedList<>();
que.add(root);
int depth = 0;
while(!que.isEmpty()){
depth++;
int size = que.size();
while(size > 0){
TreeNode node = que.poll();
//如果当前节点的左右孩子都为空,直接返回最小深度
if(node.left == null && node.right == null) return depth;
if(node.left != null) que.add(node.left);
if(node.right != null) que.add(node.right);
size--;
}
}
return depth;
}
}
调用api
class Solution {
public int minDepth(TreeNode root) {
if(root == null) return 0;
else if(root.left == null) return minDepth(root.right) + 1;
else if(root.right == null) return minDepth(root.left) + 1;
else{
return Math.min(minDepth(root.left), minDepth(root.right)) + 1;
}
}
}