力扣637-二叉树的层平均值-C++

一、运行结果

 

二、题目

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

示例 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:

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/average-of-levels-in-binary-tree

三、思路

要求二叉树每一层节点的平均值,首先想到的应该是层次遍历二叉树,用一个队列存放每一层节点,然后将队列中的节点逐个出队,并计算该层节点的值之和,如果当前出队的结点的左孩子或右孩子结点存在,则将其入队,直至队列为空。

四、代码

class Solution {
public:
    vector<double> averageOfLevels(TreeNode* root) {
        vector<double> ans;
        queue<TreeNode*> qu;  //层次遍历
        qu.push(root);
        while(!qu.empty()){
            int len = qu.size();  //每一层的节点数
            double tmpsum = 0.0;  //记录每一层的和
            for(int i=0; i<len; i++){  //qu中的节点都是同一层的节点
                TreeNode* node = qu.front();
                qu.pop();
                tmpsum += node->val;
                if(node->left != NULL){
                    qu.push(node->left);
                }
                if(node->right != NULL){
                    qu.push(node->right);
                }
            }
            ans.push_back(tmpsum / (len * 1.0));
        }
        return ans;
    }
}; 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值