#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
struct tr
{
char c;
int l;
int r;
}s[30];
int k,n;
string a,b;
int find(int a1,int a2,int b1,int b2)//找出根的编号
{
// cout<<a1<<" "<<a2<<" "<<b1<<" "<<b2<<endl;
int i,j,kk;
k++;
kk=k;
s[kk].c=a[a1];
if (a1<a2)
{
for (j=b1;j<=b2;j++)
if (b[j]==a[a1]) {i=j;break;}
if (i>b1) s[kk].l=find(a1+1,a1+i-b1,b1,i-1);
if (i<b2) s[kk].r=find(a1+i-b1+1,a2,i+1,b2);
}
return kk;
}
void print(int p)
{
if (s[p].l>0) print(s[p].l);
if (s[p].r>0) print(s[p].r);
cout<<s[p].c;
}
int main()
{ // freopen("in.txt","r",stdin);
while (cin>>a>>b)
{
k=0;
int i;
for (i=1;i<=n;i++) {s[i].l=0;s[i].r=0;s[i].c='0';}
n=a.length();
find(0,n-1,0,n-1);
//int i;for (i=1;i<=n;i++) cout<<i<<" "<<s[i].c<<" "<<s[i].l<<" "<<s[i].r<<endl;
print(1);
cout<<endl;
}
return 0;
}
题目描述:
根据前序+中序,找后序
解题思路:
根据前序+中序建树,然后后序输出。