week19-leetcode #637-AverageofLevelsinBinaryTree
链接:https://leetcode.com/problems/average-of-levels-in-binary-tree/description/
Question
Given a non-empty binary tree, return the average value of the nodes on each level in the form of an array.
Example
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.
Solution
#include <queue>
using namespace std;
// DFS
class Solution {
public:
vector<double> averageOfLevels(TreeNode* root) {
if (root == NULL) return vector<double>();
int level = 1;
// 层数通过递归的形式进行传递
cal_average(root, level);
for (auto index = 0; index < sum.size(); index++) {
average.push_back(sum[index]/count[index]);
}
return average;
}
// 采用先序遍历加入
void cal_average(TreeNode* root, int level) {
if (root == NULL) return;
// 第一次来到这一层
if (count.size() < level) {
count.push_back(1);
sum.push_back(root->val);
} else {
count[level-1]++;
sum[level-1] += (root->val);
}
if (root->left)
cal_average(root->left, level+1);
if (root->right)
cal_average(root->right, level+1);
}
private:
// 标记每一个level的和
vector<double> sum;
// 标记每一个level的个数
vector<int> count;
vector<double> average;
};
思路:维护全局的数组sum和count,sum为各层的节点值总和,count为各层的节点个数。采用DFS遍历一遍,获得各层的节点个数和节点值总和。