就是对二叉树每一层求平均值。
开始想法用层次遍历,然而又不知道该点是在哪一层。
所以要求没一点的深度,而通过先序遍历递归求没一点的深度的过程中。
好像并不需要再去层次遍历,结果就已经很明显了。
要注意leetcode的树要用->。
两个数组用来存结果。
没有数据量范围我就写的100000.
还要注意有一个奇葩数据
2147483647 两个节点也是2147483647 ,所以要改成long long
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
long long a[100000];
int b[100000];
void f(TreeNode* root,int d)
{
if(root!=NULL){
a[d]+=root->val;
b[d]+=1;
//cout<<d<<"-"<<root->val<<" ";
f(root->left,++d);
--d;
f(root->right,++d);
}
}
vector<double> averageOfLevels(TreeNode* root) {
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
f(root,0);
vector<double> ans;
for(int i=0;i<100000;i++){
if(b[i]!=0)
ans.push_back((double)a[i]/(double)b[i]);
}
return ans;
}
};
本文介绍了一种计算二叉树各层节点平均值的算法实现,采用递归方式记录每层节点总数及总值,并最终计算平均值。特别注意处理极端数据情况。
5万+

被折叠的 条评论
为什么被折叠?



