因为完全二叉树前n-1行都是满的,第n行不一定是全满状态,需要进行条件判断
import java.util.Scanner;
public class TBinaryTree {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int []a=new int[n+1];
for(int i=1;i<=n;i++)
{
a[i]=scanner.nextInt();
}
//每层的结点权值相加
//第一层1,第二层2-3,第三层4-7,第四层8-15,第i层2^(i-1)-2^i-1
int floors=0;int jishu=n;
//计算这棵树多少层
while(jishu>0)
{
jishu=(int) (jishu-Math.pow(2, floors));
floors++;
}
//创建层数数组用于保存每层的权值之和
int []floors_sum=new int[floors+1];
int count=1;
while(count<=floors)
{
for(int i=(int)Math.pow(2, count-1);i<(int)Math.pow(2, count);i++)
{
if(i>a.length-1)
{//最后一层未满,此层的和已经由上次循环算得
break;
}
else
{
floors_sum[count]+=a[i];
}
}
count++;
}
//对各层权值和排序
int index=0;
int max=-1;
for(int i=1;i<=floors;i++)
{
if(floors_sum[i]>max)
{
max=floors_sum[i];
index=i;
}
else {
if(floors_sum[i]==max)
{
if (i<index)
{
continue;
}
else {
index=i;
}
}
}
}
System.out.println(index);
}
}