637.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include <iostream>
  2. #include <cstdint>
  3. #include <vector>
  4. #include "./utils.hpp"
  5. using std::vector;
  6. using std::string;
  7. /**
  8. * Definition for a binary tree node.
  9. * struct TreeNode {
  10. * int val;
  11. * TreeNode *left;
  12. * TreeNode *right;
  13. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
  14. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  15. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  16. * };
  17. */
  18. class Solution {
  19. public:
  20. vector<double>
  21. averageOfLevels(TreeNode *root)
  22. {
  23. vector<double> vec;
  24. vector<int> amount;
  25. _go(0, root, vec, amount);
  26. for ( unsigned int i = 0; i < vec.size(); ++i ) {
  27. vec[i] /= amount[i];
  28. }
  29. return vec;
  30. }
  31. void
  32. _go(unsigned long level, TreeNode *root, vector<double> &vec, vector<int> &amount)
  33. {
  34. if ( root == NULL ) { return; }
  35. if ( level >= vec.size() ) {
  36. vec.push_back(0);
  37. amount.push_back(0);
  38. }
  39. vec[level] += root->val;
  40. ++amount[level];
  41. ++level;
  42. _go(level, root->left, vec, amount);
  43. _go(level, root->right, vec, amount);
  44. }
  45. };
  46. void r(TreeNode *root, vector<double> exp) {
  47. std::cout << "Solution().averageOfLevels(" << treenode_to_str(root) << ") = ";
  48. std::cout << vector_to_str(Solution().averageOfLevels(root));
  49. std::cout << " | exp: " << vector_to_str(exp) << "\n";
  50. };
  51. int main(void) {
  52. TreeNode root1l = TreeNode(9);
  53. TreeNode root1rl = TreeNode(15);
  54. TreeNode root1rr = TreeNode(7);
  55. TreeNode root1r = TreeNode(20, &root1rl, &root1rr);
  56. TreeNode root1 = TreeNode(3, &root1l, &root1r);
  57. r(&root1, {3.00000,14.50000,11.00000});
  58. TreeNode root2ll = TreeNode(15);
  59. TreeNode root2lr = TreeNode(7);
  60. TreeNode root2l = TreeNode(9, &root2ll, &root2lr);
  61. TreeNode root2r = TreeNode(20);
  62. TreeNode root2 = TreeNode(3, &root2l, &root2r);
  63. r(&root2, {3.00000,14.50000,11.00000});
  64. return 0;
  65. }