自己用数组写,25分,后面的有一个答案错误和段错误,所有的题解都是用指针写的,不知道自己该怎么改
到时候学一下指针的写法吧
暂存
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <iostream>
#include <string>
#include <cctype>
#include <vector>
#include <cstring>
#include <map>
using namespace std;
int n;
int maxlevel = -1;
int tree[10000],num[10000];
void dfs(int root,int level){
if(tree[root*2+1]==9999&&tree[root*2+2]==9999){
maxlevel = max(maxlevel,level);
return ;
}
//if(level>maxlevel) maxlevel = level;
if(tree[root*2+1]!=9999){
num[level]++;
dfs(root*2+1,level+1);
}
if(tree[root*2+2]!=9999){
num[level]++;
dfs(root*2+2,level+1);
}
}
int main()
{
cin >> n;
//memset(tree,9999,sizeof(tree));
for(int i=0; i<10000; i++) tree[i] = 9999;
cin >> tree[0];
for(int i=1; i<n; i++){
int a;
cin >> a;
int k = 0;
//cout << tree[k] << endl;
while(tree[k] != 9999){
//cout << tree[k] << " " << k << " k ";
//cout <<tree[k*2+1] << " " << a << endl;
if(a<=tree[k]&&tree[k*2+1]==9999){
tree[k*2+1] = a;
break;
}
if(a<=tree[k]&&tree[k*2+1]!=9999){
k = k*2+1;
continue;
}
if(a>tree[k]&&tree[k*2+2]==9999){
tree[k*2+2] = a;
break;
}
if(a>tree[k]&&tree[k*2+2]!=9999){
k = k*2+2;
continue;
}
}
//cout << endl;
}
//for(int i=0; i<n*2; i++) cout << tree[i] <<" ";
dfs(0,1);
cout << num[maxlevel-1]<<" + " <<num[maxlevel-2];
cout << " = " <<num[maxlevel-1]+num[maxlevel-2]<< endl;
return 0;
}