【问题描述】
已知一个二叉树的中序遍历序列和后序遍历序列,求这棵树的前序遍历序列。
【输入形式】
一个树的中序遍历序列 该树后序遍历序列,中间用空格分开。输入序列中仅含有小写字母,且没有重复的字母
【输出形式】
一个树的前序遍历序列
【样例输入】
dbeafcg debfgca
【样例输出】
abdecfg
#include<stdio.h>
#include<stdlib.h>
#include<cstring>
#include<string>
#include<iostream>
using namespace std;
typedef struct QNode
{
char data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
int InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front) exit(-1);
Q.front->next=NULL;
return 1;
}
int EnQueue(LinkQueue&Q,char e)
{
QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
if(!p) exit(-2);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return 1;
}
int DeQueue(LinkQueue &Q,char &e)
{
if(Q.front==Q.rear) return -1;
QueuePtr p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
free(p);
return 1;
}
int X(string z,string h,LinkQueue &Q)
{
int len=h.length();
int i;
if(len==0) return 0;
EnQueue(Q,h[len-1]);
for(i=0;i<len;i++)
if(z[i]==h[len-1])
break;
X(z.substr(0,i),h.substr(0,i),Q);
X(z.substr(i+1,len-1-i),h.substr(i,len-1-i),Q);
return 1;
}
int main()
{
LinkQueue Q;
InitQueue(Q);
string z;
string h;
cin>>z;
cin>>h;
X(z,h,Q);
char e;
while(DeQueue(Q,e)==1)
printf("%c",e);
return 0;
}