示例 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]
package Tree;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class p637_LevelAverageOfBinaryTrees {
int val;
p637_LevelAverageOfBinaryTrees left;
p637_LevelAverageOfBinaryTrees right;
public p637_LevelAverageOfBinaryTrees() {
}
public p637_LevelAverageOfBinaryTrees(int val) {
this.val = val;
}
public p637_LevelAverageOfBinaryTrees(int val, p637_LevelAverageOfBinaryTrees left, p637_LevelAverageOfBinaryTrees right) {
this.val = val;
this.left = left;
this.right = right;
}
public static void main(String[] args) {
p637_LevelAverageOfBinaryTrees root = new p637_LevelAverageOfBinaryTrees(3);
p637_LevelAverageOfBinaryTrees left = new p637_LevelAverageOfBinaryTrees(9);
p637_LevelAverageOfBinaryTrees right = new p637_LevelAverageOfBinaryTrees(20);
p637_LevelAverageOfBinaryTrees right1 = new p637_LevelAverageOfBinaryTrees(15);
p637_LevelAverageOfBinaryTrees right2 = new p637_LevelAverageOfBinaryTrees(7);
root.left = left;
root.right = right;
right.left = right1;
right.right = right2;
List<Double> res = averageOfLevels(root);
System.out.println("res = " + res);
}
public static List<Double> averageOfLevels(p637_LevelAverageOfBinaryTrees root) {
List<Double> res = new ArrayList<>();
Queue<p637_LevelAverageOfBinaryTrees> queue = new LinkedList<>();
queue.add(root);
while (queue.size() != 0) {
double sum = 0;
int len = queue.size();
for (int i = 0; i < len; i++) {
p637_LevelAverageOfBinaryTrees temp = queue.poll();
sum += temp.val;
if (temp.left != null) {
queue.add(temp.left);
}
if (temp.right != null) {
queue.add(temp.right);
}
}
res.add(sum / len);
}
return res;
}
}
#include
struct TreeNode
{
int val;
struct TreeNode *left;
struct TreeNode *right;
};
double* averageOfLevels(struct TreeNode* root, int* returnSize)
{
double* res = (double*)malloc(sizeof(double) * 10001);
int index = 0;
struct TreeNode** queue = (struct TreeNode**)malloc(sizeof(struct TreeNode*) * 10001);
int front = 0;
int rear = 0;
queue[rear++] = root;
while (front != rear)
{
double sum = 0;
int size = (rear - front + 10001) % 10001;
for (int i = 0; i < size; i++)
{
struct TreeNode* temp = queue[front++];
sum += temp->val;
if (temp->left != NULL)
{
queue[rear++] = temp->left;
}
if (temp->right != NULL)
{
queue[rear++] = temp->right;
}
}
res[index++] = sum / size;
}
*returnSize = index;
return res;
}
/*主函数省略*/
Java语言版

C语言版
