解题思路
根据层序遍历的模板进行修改;主要的不同是,不需要输出每一层所有节点值,只需要输出平均值,只需要定义一个double双精度浮点数储存每一层数的总和,输出时将总和除以层节点总数即为层平均数,改动如下:
while (!temp.empty())
{
double ave = 0; // vector<int> layer;
int num = temp.size(); // 当前层节点数
for (int i = 0; i < num; i++) // 遍历当前层的节点
{
TreeNode* top = temp.front();
temp.pop();
ave += top->val; //layer.push_back(top->val);
if (top->left != nullptr)
temp.push(top->left); // 左子节点入队
if (top->right != nullptr)
temp.push(top->right); // 右子节点入队
}
}
ans.push_back(ave / num); //ans.push_back(layer);
完整代码
class Solution {
public:
vector<double> averageOfLevels(TreeNode* root)
{
vector<double> ans;
queue<TreeNode*> temp;
if(root != nullptr)
temp.push(root);
else
return ans;
while(!temp.empty())
{
double ave = 0;
int num = temp.size();
for(int i = 0; i < num; i++)
{
TreeNode* top = temp.front();
temp.pop();
ave += top->val;
if(top->left != nullptr)
temp.push(top->left);
if(top->right != nullptr)
temp.push(top->right);
}
ans.push_back(ave/num);
}
return ans;
}
};