给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从上到下、从左到右的顺序为现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点权值之和最大?如果有多个深度的权值和同为最大,请你输出其中最小的深度。
注:根的深度是 1。
输入格式
输出格式
输出一个整数代表答案,结尾无空格换行。
输入样例
7
1 6 5 4 3 2 1
输出样例
2
思路
可利用完全二叉树每层节点数量的规律做题
放代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, cnt = 0, res = 0, flag = 0, tmp = 1;
cin>>n;
for(int i = 0; i < n; i++){
if(cnt >= n)
break;
int num = 0;
int m;
for(int j = 0; j < tmp; j++){
if(cnt >= n)
break;
cin>>m;
num += m;
cnt++;
}
if(res < num){
res = num;
flag = i;
}
tmp *= 2;
cnt++;
}
cout<<flag+1<<endl;
return 0;
}