值得注意的是,我在解决这个问题的时候下意识地将求和写成了accummulate函数的调用形式,可是这个函数是不能处理溢出的情况的,所以求和函数需要自己手写。
class Solution {
public :
vector< vector< int >> levelOrder ( TreeNode* root)
{
queue< TreeNode* > level;
vector< vector< int >> res;
vector< int > temp;
if ( root== NULL )
{
return res;
}
else
{
level. push ( root) ;
temp. push_back ( root- > val) ;
res. push_back ( temp) ;
}
int size= 0 ;
while ( ! level. empty ( ) )
{
size= level. size ( ) ;
int i= 0 ;
temp. clear ( ) ;
while ( i< size)
{
if ( level. front ( ) - > left!= NULL )
{
temp. push_back ( level. front ( ) - > left- > val) ;
level. push ( level. front ( ) - > left) ;
}
if ( level. front ( ) - > right!= NULL )
{
temp. push_back ( level. front ( ) - > right- > val) ;
level. push ( level. front ( ) - > right) ;
}
level. pop ( ) ;
i++ ;
}
if ( temp. size ( ) != 0 )
res. push_back ( temp) ;
}
return res;
}
vector< double > averageOfLevels ( TreeNode* root) {
vector< vector< int >> res= levelOrder ( root) ;
vector< double > ret;
for ( int i= 0 ; i< res. size ( ) ; i++ )
{
double sum= 0 ;
for ( int j= 0 ; j< res[ i] . size ( ) ; j++ )
{
sum+ = res[ i] [ j] ;
}
sum/ = ( 1.0 * res[ i] . size ( ) ) ;
ret. push_back ( sum) ;
}
return ret;
}
} ;