(101)637. 二叉树的层平均值(leetcode)

题目链接:
https://leetcode-cn.com/problems/average-of-levels-in-binary-tree/
难度:简单
637. 二叉树的层平均值
	给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
示例 1:
	输入:
	    3
	   / \
	  9  20
	    /  \
	   15   7
	输出:[3, 14.5, 11]
解释:
	第 0 层的平均值是 3 ,  第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。
提示:
	节点值的范围在32位有符号整数范围内。

简单的一批。。。广度遍历

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
    
    
public:
    vector<double> averageOfLevels(TreeNode* root) {
    
    
        vector<double> ans;
        if(root==NULL){
    
    
            return ans;
        }
        queue<TreeNode*> que;
        que.push(root);
        while(!que.empty()){
    
    
            int size=que.size();
            double sum=0;
            for(int i=0;i<size;i++){
    
    
                TreeNode* t=que.front();
                que.pop();
                sum+=(double)t->val;
                if(t->right!=NULL){
    
    
                    que.push(t->right);
                }
                if(t->left!=NULL){
    
    
                    que.push(t->left);
                }
            }
            ans.push_back(sum/(double)size);
        }
        return ans;
    }
};

也可以使用深度遍历 不过感觉没必要。。。(下面这个是看的题解的) 没什么新颖的 dfs 枚举 在设置两个数组记录下每行多少个和它的和就行了

class Solution {
    
    
public:
    vector<double> averageOfLevels(TreeNode* root) {
    
    
        vector<int> counts;
        vector<double> sums;
        dfs(root,0,counts,sums);
        int size=sums.size();
        vector<double> ans;
        for(int i=0;i<size;i++){
    
    
            ans.push_back(sums[i]/counts[i]);
        }
        return ans;
    }
	// level 指的是当前的层数(从0开始)
    void dfs(TreeNode* root, int level, vector<int> &counts, vector<double> &sums) {
    
    
        if (root == nullptr) {
    
    
            return;
        }
        if (level < sums.size()) {
    
    
            sums[level] += root->val;
            counts[level]++;
        } else {
    
    
            sums.push_back((double)root->val);
            counts.push_back(1);
        }
        dfs(root->left, level + 1, counts, sums);
        dfs(root->right, level + 1, counts, sums);
    }
};

猜你喜欢

转载自blog.csdn.net/li_qw_er/article/details/108548180