uva-536,從先序中序得出後序

build右序列的時候粗心,根節點p傳錯參數了,改了很久才發現

#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
#define DEBUG
const int maxn=26+5,maxv=26;
char pre_s[maxn],in_s[maxn];
void build(int l,int r,int p,int len){
    if(p>=len)return;
    char c=pre_s[p];
    int m=-1;
    // printf("%c %d %d\n", c,l,r);
    if(l>r)return;
    for(int i=l;i<=r;i++)
        if(in_s[i]==c)
            m=i;
    // cout<<m<<endl;
    // if(m==-1)
        // printf("%d %d %d %d\n", l,r,m,p);
    build(l,m-1,p+1,len);build(m+1,r,p+1+m-l,len);
    // printf("%c\n", c);
    cout<<c;
}
int main(){
#ifdef DEBUG
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
#endif
    while(scanf("%s",pre_s)!=EOF){
        scanf("%s",in_s);
        // cout<<pre_s<<endl;
        // cout<<in_s<<endl;
        build(0,strlen(in_s)-1,0,strlen(in_s));
        cout<<endl;
    }
#ifdef DEBUG
    fclose(stdin);
    fclose(stdout);
#endif
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章