Leetcode637. 二叉树的层平均值(C语言)

Leetcode637. 二叉树的层平均值(C语言)

数据结构-树:算法与数据结构参考

题目:
给定一个非空二叉树, 返回一个由每层节点平均值(32位有符号整数范围内)组成的数组.例:
输入:[3,9,20,15,7]
输出: [3, 14.5, 11]

在这里插入图片描述
思路:
一个数组存储每一层节点,一个数组存储每一层平均值,输出平均值数组。注意节点总下标还是行下标,以及相应计算条件

代码:

/**
 * 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) {
    struct TreeNode *node[20000];   //存储每层的节点
    double average[10000];          //存储每行平均值
    int num1 = 0, num2 = 0, k = 0, all = 0;
    //第num1行第num2个节点,整棵树第all个节点
    double temp = 0;
    
    if (root)
    {
        node[0] = root;
        k++;
        num2++;
        average[all++] = root->val;
    }								//初始化
    
    while (num1 != num2)            //需要遍历下一行
    {
        if (node[num1]->left)
            node[num2++] = node[num1]->left;
        if (node[num1]->right)
            node[num2++] = node[num1]->right;
        num1++;					    //遍历完当前行
        
        if (num1 == k && k != num2) //n作为求和判断条件
        {
            k = num2;
            for (int n = 0; n < num2 - num1; n++)
                temp += node[n + num1]->val;
            average[all++] = temp / (num2 - num1);
            temp = 0;
        }
    }
    
    double *out = (double *)malloc(all * sizeof(double));
    for (int n = 0; n < all; n++)
        out[n] = average[n];
    *returnSize = all;
    
    return out;
}
发布了42 篇原创文章 · 获赞 0 · 访问量 593

猜你喜欢

转载自blog.csdn.net/jeanlu/article/details/104325506