> 文章列表 > Leetcode.637 二叉树的层平均值

Leetcode.637 二叉树的层平均值

Leetcode.637 二叉树的层平均值

题目链接

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

题目描述

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

示例 1:

Leetcode.637 二叉树的层平均值

输入: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 二叉树的层平均值

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

提示:

  • 树中节点数量在 [1,104][1, 10^4][1,104] 范围内
  • −231<=Node.val<=231−1-2^{31} <= Node.val <= 2^{31} - 1231<=Node.val<=2311

解法:bfs

我们直接使用 bfs ,计算每一层的结点值之和 sumsumsum , 结点个数 szszsz,把平均值 sum/szsum / szsum/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;}
};