🎉 One-stop destination for all your technical interview Preparation 🎉
3 637. Average of Levels in Binary Tree 🌟
Given the root of a binary tree, return the average value of the nodes on each level in the form of an array. Answers within 10-5 of the actual answer will be accepted.
Previous Questions
level==levelSum.size()
) we push new values(0.0) in the sum and count vectors.class Solution {
private:
void averageOfLevelsDFS(vector<double>& levelSum, vector<double>& levelCount, TreeNode* root, int level)
{
if (root == NULL)
return;
if (level == levelSum.size()) {
levelSum.push_back(0.0);
levelCount.push_back(0.0);
}
levelSum[level] += root->val;
levelCount[level] += 1;
averageOfLevelsDFS(levelSum, levelCount, root->left, level + 1);
averageOfLevelsDFS(levelSum, levelCount, root->right, level + 1);
}
public:
vector<double> averageOfLevels(TreeNode* root)
{
vector<double> levelSum, levelCount;
averageOfLevelsDFS(levelSum, levelCount, root, 0);
int n = levelSum.size();
for (int i = 0; i < n; i++) {
levelSum[i] = levelSum[i] / levelCount[i];
}
return levelSum;
}
};
class Solution {
public:
vector<double> averageOfLevels(TreeNode* root)
{
vector<double> res;
if (root == NULL)
return res;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
int sz = q.size();
double sum = 0;
for (int i = 0; i < sz; i++) {
TreeNode* node = q.front(); q.pop();
if (node->left != NULL) q.push(node->left);
if (node->right != NULL) q.push(node->right);
sum += node->val;
}
res.push_back(sum / sz);
}
return res;
}
};
class Solution {
public:
vector<double> averageOfLevels(TreeNode* root)
{
vector<double> levelSum, levelCount;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
int n = q.size();
levelSum.push_back(0.0);
levelCount.push_back(0.0);
for (int i = 0; i < n; i++) {
TreeNode* node = q.front(); q.pop();
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
levelSum[levelSum.size() - 1] += node->val;
levelCount[levelCount.size() - 1] += 1;
}
}
int n = levelSum.size();
for (int i = 0; i < n; i++) {
levelSum[i] = levelSum[i] / levelCount[i];
}
return levelSum;
}
};