本题的关键点在于注意完全二叉树并非满二叉树。
可以根据深度强转整数进行判断:
if(Math.log(n+1)/Math.log(2) > (int)(Math.log(n+1)/Math.log(2))){
}
完整代码(else部分有点傻,代码重复,懒得提了):
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int [] tree = new int[n];
for (int i = 0; i < tree.length; i++) {
tree[i] = scan.nextInt();
}
int max = tree[0];
int depth = 1;
if(Math.log(n+1)/Math.log(2) > (int)(Math.log(n+1)/Math.log(2))){
int nn = (int)(Math.log(n+1)/Math.log(2));
for (int i = 1; i <= nn ; i++) {
int sum = 0;
int begin = (int)(Math.pow(2,i-1))-1;
int end = (int)(Math.pow(2,i)) - 1-1;
for (int j = begin; j <= end; j++) {
sum = sum + tree[j];
}
if(sum>max){
max = sum;
depth = i;
}
}
int sum2 = 0;
int depth2 = (int)(Math.log(n+1)/Math.log(2)) + 1;
for (int i = (int)(Math.pow(2,(int)(Math.log(n+1)/Math.log(2))))-1; i < tree.length; i++) {
sum2 = sum2 + tree[i];
}
if(sum2>max){
max = sum2;
depth = depth2;
}
}else {
int nn = (int)(Math.log(n+1)/Math.log(2));
for (int i = 1; i <= nn ; i++) {
int sum = 0;
int begin = (int)(Math.pow(2,i-1))-1;
int end = (int)(Math.pow(2,i)) - 1-1;
for (int j = begin; j <= end; j++) {
sum = sum + tree[j];
}
if(sum>max){
max = sum;
depth = i;
}
}
}
System.out.println(depth);
}
}