一、运行结果
二、题目
给定一个非空二叉树的根节点 root , 以数组的形式返回每一层节点的平均值。与实际答案相差 10-5 以内的答案可以被接受。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[3.00000,14.50000,11.00000]
解释:第 0 层的平均值为 3,第 1 层的平均值为 14.5,第 2 层的平均值为 11 。
因此返回 [3, 14.5, 11] 。
示例 2:
输入:root = [3,9,20,15,7]
输出:[3.00000,14.50000,11.00000]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/average-of-levels-in-binary-tree
三、思路
要求二叉树每一层节点的平均值,首先想到的应该是层次遍历二叉树,用一个队列存放每一层节点,然后将队列中的节点逐个出队,并计算该层节点的值之和,如果当前出队的结点的左孩子或右孩子结点存在,则将其入队,直至队列为空。
四、代码
class Solution {
public:
vector<double> averageOfLevels(TreeNode* root) {
vector<double> ans;
queue<TreeNode*> qu; //层次遍历
qu.push(root);
while(!qu.empty()){
int len = qu.size(); //每一层的节点数
double tmpsum = 0.0; //记录每一层的和
for(int i=0; i<len; i++){ //qu中的节点都是同一层的节点
TreeNode* node = qu.front();
qu.pop();
tmpsum += node->val;
if(node->left != NULL){
qu.push(node->left);
}
if(node->right != NULL){
qu.push(node->right);
}
}
ans.push_back(tmpsum / (len * 1.0));
}
return ans;
}
};