当前位置 博文首页 > 文章内容

    LeetCode637二叉树的层平均值

    作者: 栏目:未分类 时间:2020-07-30 14:01:29

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    题目链接

    https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/

    题解

    思路和层次遍历(点击查看)一样,没什么区别。

    // Problem: LeetCode 637
    // URL: https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/
    // Tags: Tree Queue
    // Difficulty: Easy
    
    #include <iostream>
    #include <queue>
    #include <vector>
    using namespace std;
    
    struct TreeNode{
        int val;
        TreeNode* left;
        TreeNode* right;
    };
    
    class Solution{
    private:
        vector<double> result;
    
        double calcAverageOfLevel(vector<double>& vec){
            double sum = 0;
            for (vector<double>::iterator it = vec.begin(); it!=vec.end(); ++it) sum += *it;
            return sum / vec.size();
        }
    
    public:
        vector<double> averageOfLevels(TreeNode* root) {
            // 空树,返回空数组
            if (root==nullptr)
                return this->result;
            // 父层节点,即当前正在遍历的节点
            queue<TreeNode*> parentNodes;
            parentNodes.push(root);
            // 遍历父层节点的同时获取下一层(子层)节点
            while (!parentNodes.empty()){
                // 子层结点,即下一层节点
                queue<TreeNode*> childNodes;
                // 当前层的节点的值
                vector<double> valOfLevel;
                // 遍历当前层
                while (!parentNodes.empty()){
                    root = parentNodes.front();
                    parentNodes.pop();
                    valOfLevel.push_back(root->val);
                    if (root->left!=nullptr) childNodes.push(root->left);
                    if (root->right!=nullptr) childNodes.push(root->right);
                }
                // 计算并存储当前层节点值的平均值
                this->result.push_back(this->calcAverageOfLevel(valOfLevel));
                // 更新当前层
                parentNodes = childNodes;
            }
    
            return this->result;
        }
    };
    

    作者:@臭咸鱼

    转载请注明出处:https://www.cnblogs.com/chouxianyu/

    欢迎讨论和交流!