需要注意的点是数据类型,(int/int)结果还是int,强转(double)(int/int)虽然变成了double,但是小数点后的就丢弃了。可以直接把sum定义成double。
class Solution {
public List<Double> averageOfLevels(TreeNode root) {
if (root == null) {
return new ArrayList<>();
}
List<Double> res = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();//此时队列里就是同一层的,且这一层有size个
List<Integer> layer = new ArrayList<>();
for (int i = 0; i < size; i++) {//取出同层元素,并依次把左右孩子入队
TreeNode tmp = queue.poll();
layer.add(tmp.val);
if (tmp.left != null)
queue.offer(tmp.left);
if (tmp.right != null)
queue.offer(tmp.right);
}
double sum = 0;
for (int val : layer) {
sum += val;
}
res.add(sum / size);
}
return res;
}
}