您的位置:首页 > 其它

LeetCode Weekly Contest 40(1) - Average of Levels in Binary Tree

2017-07-09 12:07 363 查看
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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: