题目大意:给一棵二叉树(先序),求每一列的和,从左到右输出
5,6是重合的与1是一列
解题思路:从数轴中间开始左孩子往左移,右孩子往右移,将值加进去
结果就是答案
注意问题:值为-1,则表示为空,
树为空输入结束
数据按先序读入
每组数据后有一个空行
改了四五次,一直WA,突然发现把“Case”打成“Cace”了
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int sum[100000];
int m; //记录最左面的位置
void build(int p)
{
int v;
scanf("%d",&v);
if(v==-1)
return;
sum[p]+=v;
if(p<m)
m=p;
build(p-1);
build(p+1);
}
int main()
{
//cout << "Hello world!" << endl;
int v;
int t=0;
while(scanf("%d",&v)&&v!=-1)
{
memset(sum,0,sizeof(sum));
int p=100000/2;
m=p;
sum[p]+=v;
build(p-1);
build(p+1);
p=m;
printf("Case %d:\n%d",++t,sum[p++]);
while(sum[p]!=0)
{
printf(" %d",sum[p++]);
}
printf("\n\n");
}
return 0;
}