天天看點

NOIP 2001 普及組 複賽 求先序排列

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;

}