题目
解题思路
利用的还是层序遍历的思路,只不过在在这里不需要对节点的值进行操作了,将节点的左右子树推入队列之后直接推出即可。
但还是要注意一点计算树高度的heigh的自增运算要在每一层遍历之前,不能放到每一层遍历的循环中去,这样会糟成错误。
代码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int minDepth(TreeNode root) {
int high = 0;
if (root == null) {
return 0;
}
Deque<TreeNode> que = new LinkedList<>();
que.offerLast(root);
while (!que.isEmpty()) {
int levelsize = que.size();
// 这个必须放在外面,遍历到每一层的时候再将树的高度+1
high++;
while (levelsize > 0) {
TreeNode node = que.pollFirst();
if (node.left == null && node.right == null) {
return high;
}
if (node.left != null) {
que.offerLast(node.left);
}
if (node.right != null) {
que.offerLast(node.right);
}
levelsize--;
}
}
return high;
}
}