给定一个非空二叉树, 返回一个由每层节点平均值组成的数组.
示例 1:
输入: 3 / \ 9 20 / \ 15 7 输出: [3, 14.5, 11] 解释: 第0层的平均值是 3, 第1层是 14.5, 第2层是 11. 因此返回 [3, 14.5, 11].
这个特别像二叉树的广度优先遍历,如果忘了可以看看Java 二叉树,深度优先遍历,广度优先遍历
public List<Double> averageOfLevels(TreeNode root) {
List<Double> list = new ArrayList<>();
if (root == null)
return list;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()){
double sum = 0;
// 根据此时的size ,把队列的全取出计算,因为还没有添加子树,所以现在的为一层的
int size = queue.size();
for (int i = 0;i < size;i++){
TreeNode temp = queue.poll();
sum += temp.val;
if (temp.left != null)
queue.offer(temp.left);
if (temp.right != null)
queue.offer(temp.right);
}
list.add(sum/size);
}
return list;
}