区分完全二叉树和满二叉树。
#include <bits/stdc++.h>
using namespace std;
#define MAXN 100000
int a[MAXN];
int main(){
int n;
scanf("%d",&n);
//sum统一赋值为0
memset(a,0,sizeof(a));
int num = 1;//每层节点个数
int k = 1;//第几层
int x;
int inputNum = 0;//输入了几个数
int maxx = 0;//记录最大权值之和
int result;//结果
while (inputNum < n){//完全二叉树最后一层可能是不满的!!!
for (int j = 0;j < num;j++){//按照层次累加
scanf("%d",&x);
a[k] += x;
}
inputNum += num;//输入了num个数
num *= 2;//每一层都比上一层多一倍节点(除了最后一层之外)
if(n - inputNum < num) num = n - inputNum;//最后一层了
if(a[k] > maxx || k == 1){
maxx = max(a[k],maxx);
result = k; //因为结果为最小的深度,即为第一个出现的深度
}
k++;//下一层
}
printf("%d",result);
return 0;
}