题目描述
输入二叉树的前序遍历和中序遍历结果,输出二叉树的后序遍历结果 输入格式 第一行为二叉树先序遍历结果 第二行为二叉树中序遍历结果。
输出格式
二叉树后序遍历结果。
Example
Inputs
426315
623415
Outputs
632514
#include<bits/stdc++.h>
using namespace std;
typedef struct BNode {
char data;
struct BNode *lchild,*rchild;
} BNode,*btree;
btree buildtree(char pre[],int l1,int r1,char in[],int l2,int r2) {
BNode *t;
int i;
t=(BNode *)malloc(sizeof(BNode));
t->data=pre[l1];
for(i=l2; in[i]!=t->data; i++); //寻找根在中序遍历的位置
int len1=i-l2,len2=r2-i;
if(len1>0) { //如果有左子树
t->lchild=buildtree(pre,l1+1,l1+len1,in,l2,l2+len1-1);
} else
t->lchild=NULL;
if(len2>0) {
t->rchild=buildtree(pre,r1-len2+1,r1,in,r2-len2+1,r2);
} else
t->rchild=NULL;
return t;
}
void postorder(btree t) {
if(t->lchild) postorder(t->lchild);
if(t->rchild) postorder(t->rchild);
cout<<t->data;
}
int main() {
BNode *t;
int i=0;
string pre,in;
cin>>pre>>in;
int l1=pre.size();
char str1[l1],str2[l1];
for(int i=0; i<l1; i++) {
str1[i]=pre[i];
str2[i]=in[i];
}
t=buildtree(str1,0,l1-1,str2,0,l1-1);
postorder(t);
cout<<endl;
return 0;
}