题目的意思是一棵树,会落叶,每个节点的值就是落叶的数量,根的左节点与根位置距离1,右节点也是距离1;然后把每一垂直位置上,每一堆树叶数量输出。
根据给出的先序遍历,碰到-1代表空节点,因为本身就是先序,也有叶子节点的标志,这样既有不用建树了,可以直接遍历。用一个100的数组,正中间的根的位置,往左就减1,往右就加1,把落叶数加上去,模仿dfs,去遍历一遍,在把数组不是0的输出。。
#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 10000;
int c[MAXN];
void build(int pos){
int v;
cin>>v;
if(v==-1){
return;
}
c[pos]+=v;
build(pos-1);
build(pos+1);
}
bool input(){
memset (c, 0, sizeof(c));
int v;
cin>>v;
if(v==-1)return -1;
else{
int position=MAXN/2;
c[position]+=v;
build(position-1);
build(position+1);
}
}
int main(){
int i=1;
while(input()){
cout<<"Case "<<i++<<":"<<endl;
for(int j : c){
if(j!=0){
cout<<j<<" ";
}
}
}
return 0;
}