问处于同一列的节点的和。
输出形式略坑
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
using namespace std;
const int maxn=10000;
const int INF=100000000;
struct node
{
int data;
node *left,*right;
node(int num):data(num),left(NULL),right(NULL){}
};
node *root;
int x,ans[maxn],n,cnt,min1,max1;
node * build()
{
cin>>x;
if(x==-1)return NULL;
node *fa=new node(x);
fa->left=build();
fa->right=build();
return fa;
}
void dfs(node *ro,int cnti)
{
if(ro!=NULL)
{
ans[cnti]+=ro->data;
min1=min(min1,cnti);
max1=max(max1,cnti);
dfs(ro->left,cnti-1);
dfs(ro->right,cnti+1);
}
}
int main()
{
//freopen("in.txt","r",stdin);
int cas=1;
bool first=true;
while(root=build())
{
memset(ans,0,sizeof(ans));
cnt=100;
min1=INF,max1=-INF;
dfs(root,cnt);
printf("Case %d:\n",cas++);
int i;
while(ans[cnt])cnt--;
bool flag=true;
for(int j=min1;j<=max1;j++)
{
if(flag)flag=false;
else cout<<" ";
cout<<ans[j];
}
cout<<endl<<endl;
}
return 0;
}