这个建树的根选的很有意思,在中间作为树的根。所以二叉树建树的方法虽然一般是有两种数组的方法,一个是如果深度不太大的话,可以之间用2*k+1,2*k建树,如果很大的话,就挨着建树,弄一个结构体,有左右子。
#include <iostream>
#include <cstring>
#include <string>
#include <map>
#include <set>
#include <algorithm>
#include <fstream>
#include <cstdio>
#include <cmath>
#include <stack>
#include <queue>
using namespace std;
const double Pi=3.14159265358979323846;
typedef long long ll;
const int MAXN=+;
const int dx[]={,,,,-};
const int dy[]={,-,,,};
const int INF = 0x3f3f3f3f;
const int NINF = 0xc0c0c0c0;
const ll mod=1e9+;
int tree[MAXN];
void build(int c)
{
int m;cin>>m;
if(m!=-) tree[c]+=m;
else return;
build(c-);
build(c+);
}
int main()
{
int root;int cnt=;
while(cin>>root&&root!=-)
{
memset(tree,,sizeof(tree));
int mid=MAXN/;
tree[mid]=root;
build(mid-);
build(mid+);
int ans=;
printf("Case %d:\n",cnt++);
while(tree[ans]==) ans++;
cout <<tree[ans++];
while(tree[ans]!=)
{
cout <<" "<<tree[ans++];
}
cout <<endl<<endl;
}
return ;
}