难度:easy
题目描述
示例
解法1:层序遍历
和前面一题思路一模一样
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
double* averageOfLevels(struct TreeNode* root, int* returnSize) {
if(root==NULL){
*returnSize = 0;
return NULL;
}
double *res = (double*)malloc(sizeof(double)*10001);
// 定义队列
struct TreeNode* queue[10001];
int i, k=0, qsize=1, qsize_next=0, head=0, tail=0;
double leval_sum = 0;
struct TreeNode* p;
queue[0] = root;
for(i = 0; i < qsize; i++){
p = queue[head++]; //队头元素出队
leval_sum += p->val;
if(p->left){
queue[++tail] = p->left;
qsize_next++;
}
if(p->right){
queue[++tail] = p->right;
qsize_next++;
}
if(i == qsize-1){ // 到该层最后一个结点时
res[k++] = leval_sum / qsize;
i = -1;
qsize = qsize_next;
qsize_next = 0;
leval_sum = 0;
}
}
*returnSize = k;
return res;
}