给定一个非空二叉树的根节点 root
, 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5
以内的答案可以被接受。
输入:root = [3,9,20,null,null,15,7] 输出:[3.00000,14.50000,11.00000] 解释:第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11 。 因此返回 [3, 14.5, 11] 。
题解:
层遍历考虑广搜,由于要计算每层的平均值,因此要判定每层的边界,于是在遍历当前层的时候,将下一层的节点存在另一个队列中,等当前层遍历结束之后,再统一放进去。
(但是时间空间都不太好,有更好的思路欢迎大佬留言)
class Solution {
public:
double sum=0;
vector<double> averageOfLevels(TreeNode* root) {
std::queue<TreeNode* > q1;
std::queue<TreeNode* > q2;
std::vector<double>lensum;
q1.push(root);
int n=0;
while(!q1.empty()){
TreeNode *node=q1.front();
sum+=node->val;
n++;
q1.pop();
if(node->left){
q2.push(node->left);
}
if(node->right){
q2.push(node->right);
}
if(q1.empty()){
sum=sum/n;
lensum.push_back(sum);
sum=0;
n=0;
q1=q2;
q2=queue<TreeNode*>();
}
}
return lensum;
}
};