给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
示例 1:
输入:
3
/ \
9 20
/ \
15 7
输出:[3, 14.5, 11]
解释:第 0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/average-of-levels-in-binary-tree
广度优先算法 BFS 用队列存节点
public List<Double> averageOfLevels(TreeNode root){
List<Double> list1 = new ArrayList<>();
Queue<TreeNode> n1 = new Queue<>();
n1.add(root);
while(!n1.isEmpty()){
long sum=0,count=0;
Queue<TreeNode> temp = new Queue<>();
while(!n1.isEmpty()){
TreeNode n = n1.remove();
sum += n.val;
count++;
if(n.left!=null) temp.add(n.left);
if(n.right!=null) temp.add(n.right);
}
n1 = temp;
list1.add(sum*1.0/count);
}
return list1;
}
不用两个队列 确定队列中的个数 即可控制每层的平均值
public List<Double> averageOfLevels(TreeNode root){
List<Double> list1 = new ArrayList<>();
Queue<TreeNode> n1 = new Queue<>();
n1.add(root);
while(!n1.isEmpty()){
double sum=0;
int cnt = n.size();
for(int i=0;i<cnt;i++){
TreeNode n = n1.poll();
sum += n.val;
if(n.left!=null) n1.add(n.left);
if(n.right!=null) n1.add(n.right);
}
list1.add(sum/count);
}
return list1;
}