C/C++教程

LeetCode/树的层次遍历

本文主要是介绍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;
    }
};
这篇关于LeetCode/树的层次遍历的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!