NOIP 2001 普及組 複賽 求先序排列
1.初賽,這種題目做得多了去,但要上機寫代碼,突然捱了,盡然覺得有些困難。
2.不過,經驗告訴我們,能用筆模拟出,那麼也能用計算機算出。
3.目前,就是要靠手動模拟,找出規律。
4.//p1030 求先序排列
//http://blog.csdn.net/yuyanggo/article/details/47955837此文寫得不錯。
//根據上述文章進行編寫,發現處理字元串位置時,十分困難,決定對程式進行改進,以友善編寫為主
//經過一番調試,樣例通過,送出AC。自認為本人代碼量雖然大了些,但從編寫角度,更容易寫出,所謂“青出于藍”
#include <stdio.h>
#include <string.h>
char in[10],post[10];//in中序 post後續
void pre(char *s1,char *s2){//s1中序 s2後序
char *p,s3[10],s4[10];
int k,len,i;
len=strlen(s1);
if(len==0)
return;
printf("%c",s2[len-1]);
p=strchr(s1,s2[len-1]);
k=p-s1;//此處忘記修改 k=p-in; 查了會
for(i=0;i<k;i++)
s3[i]=s1[i];
s3[i]='\0';
for(i=0;i<k;i++)
s4[i]=s2[i];
s4[i]='\0';
pre(s3,s4);//左子樹
for(i=0;i<len-k-1;i++){
s3[i]=s1[k+1+i];
}
s3[i]='\0';
for(i=0;i<len-k-1;i++)
s4[i]=s2[k+i];
s4[i]='\0';
pre(s3,s4);//右子樹
}
int main(){
int len;
scanf("%s%s",in,post);
pre(in,post);
return 0;
}