Leetcode.637 二叉树的层平均值

题目链接

Leetcode.637 二叉树的层平均值 easy

题目描述

给定一个非空二叉树的根节点 root, 以数组的形式返回每一层节点的平均值。与实际答案相差 1 0 − 5 10^{-5} 105 以内的答案可以被接受。

示例 1:

Leetcode.637 二叉树的层平均值_第1张图片

输入:root = [3,9,20,null,null,15,7]
输出:[3.00000,14.50000,11.00000]
解释:第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11 。
因此返回 [3, 14.5, 11] 。

示例 2:

Leetcode.637 二叉树的层平均值_第2张图片

输入:root = [3,9,20,15,7]
输出:[3.00000,14.50000,11.00000]

提示:

  • 树中节点数量在 [ 1 , 1 0 4 ] [1, 10^4] [1,104] 范围内
  • − 2 31 < = N o d e . v a l < = 2 31 − 1 -2^{31} <= Node.val <= 2^{31} - 1 231<=Node.val<=2311

解法:bfs

我们直接使用 bfs ,计算每一层的结点值之和 s u m sum sum , 结点个数 s z sz sz,把平均值 s u m / s z sum / sz sum/sz 存入答案 ans中即可。

时间复杂度: O ( n ) O(n) O(n)

C++代码:


class Solution {
public:
    vector<double> averageOfLevels(TreeNode* root) {
        vector<double> ans;

        queue<TreeNode*> q;
        q.push(root);

        while(!q.empty()){
            int sz = q.size();
            double sum = 0.0;

            for(int i = 0;i < sz;i++){
                auto t = q.front();
                q.pop();

                sum += t->val;

                if(t->left) q.push(t->left);
                if(t->right) q.push(t->right);
            }

            ans.push_back(sum / sz);
        }

        return ans;
    }
};

你可能感兴趣的:(Leetcode,算法,leetcode,c++,bfs)