考察知识点: 队列、广度优先搜索
题目分析:
为了求出每一层的平均重量,需要知道每一层
中牛的数量
和牛的重量总和
。这种一层一层的遍历方式即为广度优先搜索
。广度优先搜索一般使用一个队列
,首先将根节点
放入队列,然后先看队列中有几个值,也就是说这一层有多少个节点
。然后对这几个节点进行访问,对于其中的每个节点,如果他有左子树
,就将左子树放入队列中;如果有右子树
,再把右子树放入队列中。
当这几个节点遍历完后,相当于遍历了这一层,就能够求取平均值。此时因为二叉树可能没有遍历完,后面还有几层,所以会重复上述操作,直至队列中没有元素
。
所用编程语言: 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; } };