二叉树的层数要注意一下,因为不一定是满的二叉树所以要区分当n是2的倍数与否的情况;
从第一层到倒数第二层都可以直接一层一层来求和求最大值,但是最后一层不一定是满的,所以得记录一下到最后一层还剩下多少个元素(n - k)
参考代码:
#include<iostream> #include<cmath> using namespace std; int n, x, ma; int main(){ cin>>n; int sum = 0; int v = 0;//层数 int k = 0;//记录下一个的元素的下标 for(int i = 0; i < log2(n + 1); i++){ sum = 0; if(i < log2(n + 1) - 1){//从第一层到倒数第二层 for(int j = 1; j <= pow(2, i); j++){ cin>>x; sum += x; k++; } if(sum > ma) { ma = sum; v = i; } } else {//最后一层 for(int j = 1; j <= n - k; j++){ cin>>x; sum += x; } if(sum > ma) { ma = sum; v = i; } } } cout<<v + 1; return 0; }
0.0分
0 人评分
简单的a+b (C语言代码)浏览:765 |
不知道哪里错了浏览:1226 |
震宇大神的杀毒软件 (C语言代码)浏览:1348 |
C语言程序设计教程(第三版)课后习题10.7 (C语言代码)浏览:556 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1260 |
IP判断 (C语言代码)浏览:819 |
Tom数 (C语言代码)浏览:581 |
分糖果 (C语言代码)浏览:980 |
输入输出格式练习 (C语言代码)浏览:773 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:527 |