class Solution {
public:
vector<double> averageOfLevels(TreeNode* root) {
vector<double> res;
queue<TreeNode*> q;
if(root == nullptr) return res;
q.push(root);
while(!q.empty()){
int size = q.size();
double sum = 0;
for(int i = 0; i < size; i++){
TreeNode* cur = q.front();
q.pop();
sum += cur->val;
if(cur->left) q.push(cur->left);
if(cur->right) q.push(cur->right);
}
res.push_back(sum/size);
}
return res;
}
};
递归:
class Solution {
private:
void recursion(TreeNode* cur, int level, vector<double>& sums, vector<int>& counts){
if(cur == nullptr) return;
if(level >= sums.size()){
sums.push_back(0);
counts.push_back(0);
}
sums[level] += cur->val;
counts[level]++;
if(cur->left) recursion(cur->left, level+1, sums, counts);
if(cur->right) recursion(cur->right, level+1, sums, counts);
}
public:
vector<double> averageOfLevels(TreeNode* root) {
vector<double> sums;
vector<int> counts;
recursion(root, 0, sums, counts);
vector<double> res;
for (int i = 0; i < sums.size(); i++) {
res.push_back(sums[i] / counts[i]); // 计算每层平均值
}
return res;
}
};