NOIP 2001 普及组 复赛 求先序排列
1.初赛,这种题目做得多了去,但要上机写代码,突然捱了,尽然觉得有些困难。
2.不过,经验告诉我们,能用笔模拟出,那么也能用计算机算出。
3.目前,就是要靠手动模拟,找出规律。
4.//p1030 求先序排列
//http://blog.youkuaiyun.com/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;
}