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