LeetCode題目連結:https://leetcode.cn/problems/average-of-levels-in-binary-tree/description/
題目敘述:
給定一個非空二叉樹, 返回一個由每層節點平均值組成的陣列。
思路
這題我們依然是採用層序遍歷,其實和二叉樹的層序遍歷沒多大區別,遍歷的時候插入每一層的平均值就夠了!如果不會二叉樹的層序遍歷的話,可以去看看我之前的文章,裡面詳細講述了二叉樹的層序遍歷
二叉樹的層序遍歷:https://www.cnblogs.com/Tomorrowland/articles/18314740
這題相比於二叉樹的層序遍歷,區別就是不需要設定current
陣列,只需要遍歷每一層時設定一個sum
,儲存每一層的元素的總和,然後再將平均值放入陣列中即可
AC程式碼如下:
//二叉樹的層平均值
class Solution {
public:
vector<double> averageOfLevels(TreeNode* root) {
vector<double> result;
if (root == NULL) return result;
queue<TreeNode*> que;
que.push(root);
while (!que.empty()) {
int size = que.size();
//定義sum變數,儲存每一層元素相加的總和
double sum = 0;
//這裡不能用while迴圈,否則size的值會改變
for(int i=0;i<size;i++) {
TreeNode* node = que.front();
que.pop();
sum += node->val;
if (node->left != nullptr) que.push(node->left);
if (node->right != NULL) que.push(node->right);
}
//將每一層的平均值加入陣列中
result.push_back(sum / size);
}
return result;
}
};