题目描述

给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。

来源,leetcode 每日一题 637. 二叉树的层平均值

例如:

  1. 输入:
  2. 3
  3. / \
  4. 9 20
  5. / \
  6. 15 7
  7. 输出:[3, 14.5, 11]
  8. 解释:
  9. 0 层的平均值是 3 , 1层是 14.5 , 2层是 11 。因此返回 [3, 14.5, 11]

解题思路

  1. 层次遍历,使用队列,将每层节点按序加载进来。

    代码

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