微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LeetCode/树的层次遍历

1. 二叉树的层平均值

class Solution {
public:
    vector<double> averageOfLevels(TreeNode* root) {
        auto averages = vector<double>();
        auto q = queue<TreeNode*>();
        q.push(root);
        while (!q.empty()) {
            double sum = 0;//每一层的和
            int size = q.size();//当前层的节点数量
            for (int i = 0; i < size; i++) {
                auto node = q.front();
                q.pop();
                sum += node->val;//求和
                if (node->left) q.push(node->left);
                if (node->right) q.push(node->right);
            }
            averages.push_back(sum / size);
        }
        return averages;
    }
};

2. 每个树行中找最大值

class Solution {
public:
    vector<int> largestValues(TreeNode* root) {
        vector<int> res;
        if(!root) return res;
        queue<TreeNode*> q;
        q.push(root);
        int cur = 1;//每次出栈的次数,表示遍历一层
        int next=0;//记录下一层用作下一次遍历
        int max_;
        while(cur>0){
            max_ = INT_MIN;
            while(cur>0){//这里可以改为for循环更加简洁
                TreeNode* point = q.front();
                max_ = max(max_,point->val);
                q.pop();
                cur--;
                if(point->left){
                    q.push(point->left);
                    next++;
                }
                if(point->right){
                    q.push(point->right);
                    next++;
                }
            }
            res.push_back(max_);
            cur = next;
            next = 0;
        }
        return res;
    }
};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐