637. 二叉樹的層平均值
給定一個非空二叉樹, 返回一個由每層節點平均值組成的數組.
示例 1:
輸入: 3 / \ 9 20 / \ 15 7 輸出: [3, 14.5, 11] 解釋: 第0層的平均值是 3, 第1層是 14.5, 第2層是 11. 因此返回 [3, 14.5, 11].注意:
- 節點值的範圍在32位有符號整數範圍內。
解法一
//時間複雜度O(n), 空間複雜度O(n)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<double> averageOfLevels(TreeNode* root) {
vector<double> res;
queue<TreeNode*> q1;
q1.push(root);
while(!q1.empty()) {
queue<TreeNode*> q2;
q2.swap(q1);
long sum = 0, n = 0;
while(!q2.empty()) {
TreeNode* temp = q2.front();
q2.pop();
sum += temp->val;
n++;
if(temp->left) q1.push(temp->left);
if(temp->right) q1.push(temp->right);
}
res.push_back((double)sum / n);
}
return res;
}
};
層序遍歷。爲了區分層次,使用兩個隊列。q1記錄上一層結點,每次循環把q1給q2,清空q1,遍歷q2時把其個數及和記錄,q2空時說明當前層遍歷結束,開始下一層。