给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
示例 1:
输入:
[3,9,20,null,null,15,17]
输出:[3, 14.5, 11]
解释:
第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。
题解:这道题是一道简单的二叉树遍历问题,BFS方法与DFS方法都可以实现,这里我主要想说的是BFS方法,因为BFS算法实际上就是按照层序来一层一层遍历的,与这道题的求层平均值的要求很契合,具体做法就是先往BFS算法所需要维护的队列中加入根节点,然后按照层序遍历下去,在遍历的过程中,每次我们都要取出当前队列中的所有元素,计算这些元素平均值,同时需要往队列中加入队列中元素的子结点。
class Solution {
public List<Double> averageOfLevels(TreeNode root) {
if(root==null)
return new ArrayList<>();
/*
* res用于存储结果
* Nodes是BFS中需要用到的队列
* list用于临时存储每一层的结点key值
*/
List<Double>res=new ArrayList<>();
List<Integer>list=new ArrayList<>();
Queue<TreeNode>Nodes=new LinkedList<>();
Nodes.add(root);
while(!Nodes.isEmpty()){
TreeNode node=null;
int size=Nodes.size();
for(int i=0;i<size;i++){
node=Nodes.poll();
list.add(node.val);
if(node.left!=null)
Nodes.add(node.left);
if(node.right!=null)
Nodes.add(node.right);
}
res.add(layerAverage(list));
list.clear();
}
return res;
}
private double layerAverage(List<Integer>list){
double sum=0;
for(int x:list){
sum+=x;
}
return sum/list.size();
}
}