Time Limit: 3000MS | Memory Limit: Unknown | 64bit IO Format: %lld & %llu |
这道题用了建树的思想巧妙了用递归把先序遍历表现出来
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int tree[1100];
void dfs(int pos,int num);
int main()
{
int n, ncase=1;
while(1)
{
memset(tree,0,sizeof(tree));
scanf("%d", &n);
if(n==-1)
{
break;
}
dfs(500,n);
printf("Case %d:\n",ncase++);
int flag=1;
for(int i=0;i<=1010;i++)
{
if(tree[i]!=0)
{
if(flag==1)
{
printf("%d",tree[i]);
flag=0;
}
else
{
printf(" %d",tree[i]);
}
}
}
printf("\n\n");
}
return 0;
}
void dfs(int pos,int num)
{
int x, y;
tree[pos]+=num;
scanf("%d", &x);
if(x!=-1)
{
dfs(pos-1,x);
}
scanf("%d", &y);
if(y!=-1)
{
dfs(pos+1,y);
}
return ;
}
#include <cstring>
#include <cstdio>
using namespace std;
int tree[1100];
void dfs(int pos,int num);
int main()
{
int n, ncase=1;
while(1)
{
memset(tree,0,sizeof(tree));
scanf("%d", &n);
if(n==-1)
{
break;
}
dfs(500,n);
printf("Case %d:\n",ncase++);
int flag=1;
for(int i=0;i<=1010;i++)
{
if(tree[i]!=0)
{
if(flag==1)
{
printf("%d",tree[i]);
flag=0;
}
else
{
printf(" %d",tree[i]);
}
}
}
printf("\n\n");
}
return 0;
}
void dfs(int pos,int num)
{
int x, y;
tree[pos]+=num;
scanf("%d", &x);
if(x!=-1)
{
dfs(pos-1,x);
}
scanf("%d", &y);
if(y!=-1)
{
dfs(pos+1,y);
}
return ;
}