考察知识点: 队列、广度优先搜索
题目分析:
为了求出每一层的平均重量,需要知道每一层中牛的数量和牛的重量总和。这种一层一层的遍历方式即为广度优先搜索。广度优先搜索一般使用一个队列,首先将根节点放入队列,然后先看队列中有几个值,也就是说这一层有多少个节点。然后对这几个节点进行访问,对于其中的每个节点,如果他有左子树,就将左子树放入队列中;如果有右子树,再把右子树放入队列中。
当这几个节点遍历完后,相当于遍历了这一层,就能够求取平均值。此时因为二叉树可能没有遍历完,后面还有几层,所以会重复上述操作,直至队列中没有元素。
所用编程语言: C++
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return double浮点型vector
*/
vector<double> averageOfLevels(TreeNode* root) {
// write code here
if (!root) return {};
vector<double> res;
queue<TreeNode*> cows;
cows.push(root);
while (!cows.empty()) {
int size = cows.size();
int sum = 0;
for (int i = 0; i < size; i++) {
TreeNode *p = cows.front();
sum += p->val;
cows.pop();
if (p->left) cows.push(p->left);
if (p->right) cows.push(p->right);
}
res.push_back((double)sum / size);
}
return res;
}
};

京公网安备 11010502036488号