• 637. 二叉树的层平均值


    637. 二叉树的层平均值

    题目链接:637. 二叉树的层平均值(简单)

    题目描述

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

    示例 1:

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

    提示:

    • 节点值的范围在32位有符号整数范围内。

    题解

    思路:对数进行层次遍历,再求每一层节点的和,除以每一层节点个数即为平均值。

    代码(C++):

    struct TreeNode {
        int val;
        TreeNode* left;
        TreeNode* right;
        TreeNode(int value) : val(value), left(nullptr), right(nullptr) {}
    };
    ​
    class Solution {
    public:
        vector<double> averageOfLevels(TreeNode* root) {
            queue<TreeNode*> que;
            vector<double> result;
            if (root != nullptr) que.push(root);
            while (!que.empty()) {
                int size = que.size();
                double sum = 0;
                for (int i = 0; i < size; i++) {
                    TreeNode* node = que.front();
                    que.pop();
                    sum += node->val;
                    if (size - 1 == i) result.push_back(sum/size);
                    if (node->left) que.push(node->left);
                    if (node->right) que.push(node->right);
                }
            }
            return result;
        }
    };

    代码(Java):

        public List<Double> averageOfLevels(TreeNode root) {
            Deque<TreeNode> que = new LinkedList<>();
            List<Double> result = new ArrayList<>();
    ​
            if (root != null) que.offer(root);
    ​
            while (!que.isEmpty()) {
                int size = que.size();
                double sum = 0.0;
                for (int i = 0; i < size; i++) {
                    TreeNode node = que.poll();
                    sum += node.val;
                    if (size - 1 == i) result.add(sum/size);
                    if (node.left != null) que.offer(node.left);
                    if (node.right != null) que.offer(node.right);
                }
            }
    ​
            return result;
        }

    分析:

    • 时间复杂度:O(N)

    • 空间复杂度:O(N)

     
  • 相关阅读:
    zepto的源代码注释(转)
    关于js的连续赋值
    一道js题
    深入理解setTimeout的作用域
    深入理解setTimeout和setinterval
    webapp之路--apple私有属性apple-touch-icon
    javascript中的原型继承
    webapp之路--百度手机前端经验(转)
    (转)浏览器的渲染原理
    node.js study: cluster
  • 原文地址:https://www.cnblogs.com/wltree/p/15610566.html
Copyright © 2020-2023  润新知