一樣運用遞迴方法實作
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int pile_left[100], pile_right[100];
int root=0,flag=0,flag_left=0,flag_right=0;
void sol(int nodes){
if(nodes!=-1){
//printf("flag=%d nodes=%d\n",flag,nodes);
if(flag<0){
pile_left[-flag-1] += nodes;
if(flag_left<-flag) flag_left = -flag;
}
else if(flag>0){
pile_right[flag-1] += nodes;
if(flag_right<flag) flag_right = flag;
}
else root+= nodes;
}
int s;
scanf("%d",&s);
if(s!=-1){
flag--;
sol(s);
flag++;
}
scanf("%d",&s);
if(s!=-1){
flag++;
sol(s);
flag--;
}
return;
}
int main(){
freopen("input.txt","r",stdin);
int kase=0,r;
while(scanf("%d",&r) && r!=-1){
kase++;
printf("Case %d:\n",kase);
flag=0;
flag_left=-1;
flag_right=-1;
root = 0;
memset(pile_left,0,sizeof(pile_left));
memset(pile_right,0,sizeof(pile_right));
sol(r);
if(flag_left>=0)
for(int i=flag_left-1 ; i>=0 ; i--){
printf("%d ",pile_left[i]);
}
printf("%d",root);
if(flag_right>=0)
for(int i=0 ; i<=flag_right-1 ; i++){
printf(" %d",pile_right[i]);
}
printf("\n\n");
}
return 0;
}
沒有留言:
發佈留言