值得注意的是,我在解决这个问题的时候下意识地将求和写成了accummulate函数的调用形式,可是这个函数是不能处理溢出的情况的,所以求和函数需要自己手写。
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root)
{
queue<TreeNode*> level;
vector<vector<int>> res;
vector<int> temp;
if(root==NULL)
{
return res;
}
else
{
level.push(root);
temp.push_back(root->val);
res.push_back(temp);
}
int size=0;
while(!level.empty())
{
size=level.size();
int i=0;
temp.clear();
while(i<size)
{
if(level.front()->left!=NULL)
{
temp.push_back(level.front()->left->val);
level.push(level.front()->left);
}
if(level.front()->right!=NULL)
{
temp.push_back(level.front()->right->val);
level.push(level.front()->right);
}
level.pop();
i++;
}
if(temp.size()!=0)
res.push_back(temp);
}
return res;
}
vector<double> averageOfLevels(TreeNode* root) {
vector<vector<int>>res=levelOrder(root);
vector<double>ret;
for(int i=0;i<res.size();i++)
{
double sum=0;
for(int j=0;j<res[i].size();j++)
{
sum+=res[i][j];
}
sum/=(1.0*res[i].size());
ret.push_back(sum);
}
return ret;
}
};