注意区分:
1.满二叉树:一个深度为k且有2^k-1个结点的二叉树称为满二叉树。
2.完全二叉树:对满二叉树的结点进行编号,约定编号从根结点起,自上而下,自左而右。则深度为k的,有n个结点的二叉树,当且仅当每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时,称之为完全二叉树。
从定义可知,满二叉树是完全二叉树的一种特殊形态,即如果一颗二叉树是满二叉树,则它必是完全二叉树。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
int m;
long long max_t, sum;//分表表示最大值,和各层的值的总和
int ans, d = 0, res = 0;//分别表示答案,和深度,每层的个数
for(int i = 0; i < n; i++)
{
scanf("%d", &m);
if(i == 0)
{
max_t = m;
ans = 1;
d++;
}
else
{
sum += m;
res++;
}
if(res == pow(2, d) || i == n - 1)
{
if(sum > max_t)
{
max_t = sum;
ans = d + 1;
}
res = 0;
sum = 0;
d++;
}
}
cout << ans << endl;
return 0;
}
赞👍