查看原题目请点我这里
解题思路
首先利用前序和中序还原二叉树,然后利用后序遍历输出。
这是就是模板。
注意
因为输入的是字母,所以树的结构体中应该改为char。

//由前序遍历和中序遍历还原后序遍历

#include <cstdio>
#include <cstring>
char str1[30],str2[30];
struct node {  //创建结构体 
    char data;
    node* lchild;
    node* rchild;
};
void postorder(node* root){
   if(root->lchild != NULL) {
        postorder(root->lchild);
   }    
   if(root->rchild != NULL) {
        postorder(root->rchild);
   }
   printf("%c",root->data);   
} 

node* create(int preL,int preR, int inL, int inR){
    if(preL > preR) {
        return NULL; //叶子节点设为NULL
    }
    node* root = new node; //创建新节点
    root->data = str1[preL];
    int k;
    for(k = inL;k <= inR;k++){ //找到中序中根的位置
        if(str2[k] == root->data) {
            break;
        }
    }
    int numLeft = k - inL; //对左右树进行递归建树
    root->lchild = create(preL + 1,preL + numLeft, inL,k - 1);
    root->rchild = create(preL + numLeft + 1, preR, k + 1,inR);
    return root;
}
int main() { 
 while(scanf("%s%s",str1,str2)!=EOF) {
    int len1 = strlen(str1);
    int len2 = strlen(str2);
    node* root = create(0,len1-1,0,len2-1); //还原树 
    postorder(root);
 }  

    return 0;
}