天天看點

已知先序中序,求後序

//已知先序、中序求後序
//測試資料:
//樣例輸入:
//      DBACEGF ABCDEFG
//      BCAD CBAD
//樣例輸出:
//      ACBFGED
//      CDAB

#include "stdio.h"
#include <string.h>
void build(char* prestr,char* instr,char* laststr,int len){
    if(len<=0)return;
    int pos = strchr(instr,prestr[0])-instr;                    //找到根節點在中序周遊中的位置
    build(prestr+1,instr,laststr,pos);                          //遞歸構造左子樹的後序周遊
    build(prestr+pos+1,instr+pos+1,laststr+pos,len-pos-1);    //遞歸構造右字數的後序周遊
    laststr[len-1] = prestr[0];                                 //把根節點添加到後序周遊的後端

}
main(){
    char pres[10000];
    char ins[10000];
    char lasts[10000];
    while(scanf("%s%s",pres,ins)== 2){
        int len = strlen(pres);
        build(pres,ins,lasts,len);
        lasts[len]='\0';
        printf("%s\n",lasts);
    }


}

           

繼續閱讀