题干:
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
示例:
输入:
3
/ \
9 20
/ \
15 7
输出:[3, 14.5, 11]
解释:
第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。
class Solution {
public List<Double> averageOfLevels(TreeNode root) {
List<Double> ans = new ArrayList();
if(root==null) return ans;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty()){
int cnt = queue.size();
double sum=0;
for(int i=0;i<cnt;i++){
TreeNode node = queue.poll();
sum += node.val;
if(node.left!=null) queue.add(node.left);
if(node.right!=null) queue.add(node.right);
}
ans.add(sum/cnt);
}
return ans;
}
}
先把根结点放入队列中,然后逐层循环,当前队列中的结点数量为cnt,然后循环将队列中的结点抛出,并判断其是否有左右子结点,有则加入队列中,循环结束时,本层所有的结点和sum除以本层的结点数cnt就是本层的均值。