🍕🎉🥓🎊🚗🐷😱❤😀❣🥙🎇🕵️♀️😎🎑🎁🎉😚🎇
题目:
- 给定一个非空二叉树的根节点
root
, 以数组的形式返回每一层节点的平均值。与实际答案相差 1 0 − 5 10^{-5} 10−5 以内的答案可以被接受。
示例:
- 输入: r o o t = [ 3 , 9 , 20 , n u l l , n u l l , 15 , 7 ] root = [3,9,20,null,null,15,7] root=[3,9,20,null,null,15,7]
- 输出: [ 3.00000 , 14.50000 , 11.00000 ] [3.00000,14.50000,11.00000] [3.00000,14.50000,11.00000]
- 解释: 第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11 。因此返回 [3, 14.5, 11] 。
解题思路:
利用队列,每遍历一个元素,就将其加入到队列中,若左右孩子不空,则加入队列,每遍历一层就统计一层元素的平均值加入到结果集中。
C++
class Solution {
public:
vector<double> averageOfLevels(TreeNode* root) {
queue<TreeNode*> q;
vector<double> res;
if(root != NULL) q.push(root);
while(!q.empty()){
double sum = 0;
int size = q.size();
for(int i = 0; i < size; i++){
TreeNode* temp = q.front();
q.pop();
sum += temp->val;
if(temp->left) q.push(temp->left);
if(temp->right) q.push(temp->right);
}
res.push_back(sum / size);
}
return res;
}
};
Java版本
class Solution {
public List<Double> averageOfLevels(TreeNode root) {
Deque<TreeNode> q = new LinkedList<>();
List<Double> res = new ArrayList<>();
if(root != null) q.addLast(root);
while(!q.isEmpty()){
double sum = 0.0;
int size = q.size();
for(int i = 0; i < size; i++){
TreeNode temp = q.pollFirst();
sum += temp.val;
if(temp.left != null) q.addLast(temp.left);
if(temp.right != null) q.addLast(temp.right);
}
res.add(sum / size);
}
return res;
}
}