1.题目描述
2.思路点播 :根的深度是1
(1)如果是满二叉树,每个节点都有左右孩子,每层的节点个数为2^(k-1),k代表层数(k=1,2,3…)
每层的节点个数为2^(k-1)个
(2)如果是完全二叉树:一个深度为k,节点为n的二叉树,节点按从上往下,从左往右的顺序编号,如果编号为i(1<=i<=n)的节点与满二叉树的节点的位置相同,则成为完全二叉树。
前k层的节点个数为2^K-1(即前k层可以把他看成满二叉树哈)
(3)所以本题的题目 简单来说就是找哪一层的权重最大(就是哪一层的累加和最大),给了7个数。
第一层,和为1
第二层6+5=11
第三层4+3+2+1=10
所以输出的层数 应该是2
3.java代码实现
import java.util.Scanner;
public class Main34 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int[] arr=new int[n];
int sum=0;
for(int i=0;i<n;i++)
{
arr[i]=sc.nextInt();
}
int num=0;//节点个数
int j=1;
int h=0;
int maxx=-9999999;
int maxh=0;
for(int i=1;i<=n;i++)
{
sum+=arr[i];
num++;//第一层 ,节点个数1
if(num==j)//如果num=j,说明此时在第一层
{
h++;//深度+1
num=0;//下一深度的节点数重新计数
j=j*2;//下一深度的节点数为当前节点数的两倍
if(sum>maxx)//更新每一层节点和的最大值
{
maxx=sum;
maxh=h;
}
sum=0;//下一层的sum重新从0开始计数
}
}
if(sum>maxx)
maxh=h+1;
//若第三层的和此时为最大值,第四层的和小于第三层,不更新最大值;
//如果第五层的和(但是节点数没有满)大于第四层的节点数,深度加一
System.out.println(maxh);
}
}