题意:
给前序和中序,求后序便利。
思路:
惭愧,把最原始的都忘了,记得这应该是数据结构的例题之类的知识。
所以特地把最原始的树也构造一遍,再后序输出,练练手。
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
#include<queue>
#include<cmath>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define Abs(a) ((a)>0?(a):(-(a)))
#define llong long long int
using namespace std;
const int N=30;
const int inf=(1<<30);
int n,m;
char str1[N],str2[N];
struct Node
{
int father;
int leftson;
int rightson;
}node[N];
void preorder(char * s1,char * s2,int len,int pre,int son)//rebuild the tree
{
int now=s1[0]-'A'+1;
if(len==1)
{
if(son)
node[pre].rightson=now;
else
node[pre].leftson=now;
node[now].father=pre;
return;
}
int pos;
for(pos=0;pos<len;pos++)
{
if(s2[pos]==s1[0])
{
break;
}
}
if(pos)
{
preorder(s1+1,s2,pos,now,0);
}
if(len-pos-1)
{
preorder(s1+pos+1,s2+pos+1,len-pos-1,now,1);
}
if(son)
node[pre].rightson=now;
else
node[pre].leftson=now;
node[now].father=pre;
}
void print_pod(int now)
{
if(!now)
return;
print_pod(node[now].leftson);
print_pod(node[now].rightson);
printf("%c",now+'A'-1);
}
int main()
{
while(scanf(" %s %s",str1,str2)!=EOF)
{
memset(node,0,sizeof(node));
n=strlen(str1);
preorder(str1,str2,n,0,0);
print_pod(str1[0]-'A'+1);
printf("\n");
}
return 0;
}