https://leetcode.com/problems/average-of-levels-in-binary-tree/#/description
求出二叉树每层的均值,这个就是层序遍历的变种,没什么好说的。只是test case 里有INT_MAX-1,这个就很烦了,我没想到什么好办法,就把数字全都专程double 来处理了。
思路用dfs 或者bfs 都可以,这里我采用了dfs,有个坑是给vector 赋值的时候是拷贝的,所以尽量用指针
/** * 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: void dfsIter(TreeNode *root, int level, vector<vector<double>*>& rets) { if (root == nullptr) return; vector<double> *l; if (rets.size() <= level) { l = new vector<double>(); rets.push_back(l); } else { l = rets.at(level); } l->push_back(root->val); dfsIter(root->right, level+1, rets); dfsIter(root->left, level+1, rets); } vector<double> averageOfLevels(TreeNode* root) { if (root == nullptr) return vector<double>(); vector<vector<double>*> levels; vector<double> result; dfsIter(root, 0, levels); for (auto level : levels) { double sum = 0; for (int n : *level) { sum += (double)n; } result.push_back((double)sum / (double)level->size()); } return result; } };