1 public static void main(String[] args) { 2 char[] s ={'3', '2', '3', '^', '3','^', '1'}; 3 eatgold(s); 4 } 5 6 private static void eatgold(char[] value) { 7 // char[] value=value.toCharArray(); 8 int length=value.length; 9 int count=0; 10 //计算二叉树的层数 11 while(length>0){ 12 length-=Math.pow(2, count); 13 count++; 14 15 } 16 for(int i=0;i<value.length;i++){ 17 if(value[i] == '^'){ 18 value[i]= '0'; 19 20 } 21 } 22 ArrayList<Integer> list=new ArrayList<Integer>(); 23 //计算二叉树每一层的和 24 for(int i=0;i<count;i++){ 25 int index=0; 26 for(int j=(int) Math.pow(2, i)-1;j<Math.pow(2, i+1)-1&&j<value.length;j++){ 27 index += Integer.parseInt(value[j]+""); 28 } 29 list.add(index); 30 } 31 int sum=0; 32 for(int i=0;i<list.size();i++){ 33 sum+=list.get(i); 34 } 35 //两个端点的数,是去除里面第一个,或者最后倒数第二个,比较去掉最小的那个 36 int max=sum-Math.min(list.get(1), list.get(list.size()-2)); 37 int maint=0; 38 //中间的几个相邻的去除,找出最大的 39 for(int i=1;i<list.size()-1;i++){ 40 maint=sum-list.get(i-1)-list.get(i+1); 41 if(max<maint){ 42 max=maint; 43 } 44 } 45 System.out.println(max); 46 }