题目
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
解法
- 逐层遍历。
- 了解vector的使用。
代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
#include <bits/stdc++.h>
#include <unordered_map>
#include <unordered_set>
using namespace std;
#define rep(i,a,n) for(int i=a; i<n; i++)
#define per(i,a,n) for(int i=n-1; i>=a; i--)
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(), (x).end()
#define fi first
#define se second
#define SZ(x) ((int)(x).size())
#define fr(x) freopen(x,"r",stdin)
#define fw(x) freopen(x,"w",stdout)
typedef vector<int> VI;
typedef vector<char> VC;
typedef vector<VI> VVI;
typedef vector<VC> VVC;
typedef long long ll;
typedef pair<int, int> PII;
typedef unordered_map<int, int> MII;
typedef double db;
ll gcd(ll a, ll b){return b?gcd(a%b, b):a;}
const ll mod = 1000000007;
// head
class Solution {
public:
vector<double> averageOfLevels(TreeNode* root) {
vector<double> ans;
vector<TreeNode *> Q{root}, nQ;
while(!Q.empty()){
nQ.clear();
db s = 0.0;
for(auto node:Q) {
s += node->val;
if(node->left ) nQ.pb(node->left);
if(node->right ) nQ.pb(node->right);
}
ans.pb(s / SZ(Q));
Q.assign(all(nQ));
}
return ans;
}
};