其他分享
首页 > 其他分享> > 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;
    }
};

标签:node,遍历,层次,point,int,max,push,root,LeetCode
来源: https://www.cnblogs.com/929code/p/16518925.html