uva536 Tree Recovery

重建树。

#include<bits/stdc++.h>
using namespace std;
int l[30],r[30],pre[30],in[30],n,flag[30],ok;
int bulid(int l1,int r1,int l2,int r2)
{
    if(l2>r2) return 0;
    int t=pre[l1];
    int p=l2;
    while(t!=in[p]) p++;
    int cnt=p-l2;
    l[t]=bulid(l1+1,l1+cnt,l2,p-1);
    r[t]=bulid(l1+cnt+1,r1,p+1,r2);
    return t;
}

void post_order(int t)
{
    if(l[t]!=0)  post_order(l[t]);
    if(r[t]!=0) post_order(r[t]);
        printf("%c",'A'+t-1);
}

int main()
{
   string a,b;
   while(cin>>a>>b){
      memset(flag,0,sizeof(flag));
      memset(l,0,sizeof(l));
      memset(r,0,sizeof(r));
      n=a.size();
      for(int i=0;i<n;i++) pre[i]=a[i]-'A'+1;
      for(int i=0;i<n;i++) in[i]=b[i]-'A'+1;
      bulid(0,n-1,0,n-1);
      post_order(pre[0]);
      cout<<endl;
   }
}

你可能感兴趣的:(uva536 Tree Recovery)