C++

方法类似于进行二叉树的层遍历

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10. * };
  11. */
  12. class Solution {
  13. public:
  14. vector<double> averageOfLevels(TreeNode* root) {
  15. vector<double> ret;
  16. queue<TreeNode *> q;
  17. q.push(root);
  18. while(!q.empty())
  19. {
  20. int size = q.size();
  21. double currentSum = 0;
  22. for(int i = 0; i < size; i++)
  23. {
  24. TreeNode* node = q.front();
  25. currentSum += node->val;
  26. q.pop();
  27. if(node->left) q.push(node->left);
  28. if(node->right) q.push(node->right);
  29. }
  30. ret.push_back(currentSum/size);
  31. }
  32. return ret;
  33. }
  34. };