面试经典150题-10-二叉树的层平均值-力扣637

66 阅读1分钟

二叉树的层平均值-力扣637

难度:easy

题目描述

image.png

示例

image.png image.png

解法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;
}