Leetcode637.二叉树的层平均值 Average of Levels in Binary Tree(Java)
##Tree##
本题求二叉树每层的结点平均值
可以采用DFS、BFS
这里采用BFS层次遍历
- 队列
q
中元素为某一层的结点,count = q.size()
代表队列中元素的个数 - 循环
count
次,遍历队列q
中所有结点,求出该层所有结点的和sum
,并且对每个结点都需要将其左右儿子加入队列中 - 将每层的平均值
sum/count
加入到结果集合中
时间复杂度: O(n)
class Solution {
public List<Double> averageOfLevels(TreeNode root) {
List<Double> ans = new LinkedList<Double>();
Queue<TreeNode> q = new LinkedList<>();
if (root == null) return ans;
q.add(root);
while(!q.isEmpty()) {
double sum = 0;
int count = q.size();
TreeNode curr;
for (int i = 0; i < count; i ++) {
curr = q.poll();
sum += curr.val;
if (curr.left != null) q.offer(curr.left);
if (curr.right != null) q.offer(curr.right);
}
ans.add(sum / count);
}
return ans;
}
}