637. Average of Levels in Binary Tree
Difficulty: Easy
Given a non-empty binary tree, return the average value of the nodes on each level in the form of an array.
Example 1:
Input:
3
/ \
9 20
/ \
15 7
Output: [3, 14.5, 11]
Explanation:
The average value of nodes on level 0 is 3, on level 1 is 14.5, and on level 2 is 11. Hence return [3, 14.5, 11].
Note:
The range of node's value is in the range of 32-bit signed integer.
一年没有刷题,是时候重操C++了。本题较为简单,最核心的就是如何按照level遍历整棵树,大概思路就是遍历当前level的节点,记录下他们的孩子节点(即下一个level的节点,并计算均值),这里给出非递归的实现。
class Solution {
public:
vector<double> averageOfLevels(TreeNode* root) {
vector<double> result;
if(root == NULL) return result;
result.push_back(root->val);
// 记录当前level的节点
vector<TreeNode*> curLevelNodes;
curLevelNodes.push_back(root);
while(curLevelNodes.size()>0) {
vector<TreeNode*> nextLevelNodes;
double re = 0;
// 每一次遍历curLevelNodes都记录下下一个level的节点并计算其均值
for(int i=0;i<curLevelNodes.size();i++) {
if(curLevelNodes[i]->left != NULL) {
re += curLevelNodes[i]->left->val;
nextLevelNodes.push_back(curLevelNodes[i]->left);
}
if(curLevelNodes[i]->right != NULL) {
re += curLevelNodes[i]->right->val;
nextLevelNodes.push_back(curLevelNodes[i]->right);
}
}
if(nextLevelNodes.size()>0)
result.push_back(re/nextLevelNodes.size());
curLevelNodes = nextLevelNodes;
}
return result;
}
};