#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
struct TreeNode {
char data;
TreeNode* leftChild;
TreeNode* rightChild;
};
/**
* KY212
* 根据先序遍历和中序遍历重构二叉树
* @param preOrder 先序遍历
* @param inOrder 中序遍历
* @return 该数的根结点
*/
TreeNode* rebuild(string preOrder, string inOrder) {
if (preOrder.size() == 0) { //不能再分割了
return NULL;
}
//新建在堆上
TreeNode* treeNode = new TreeNode;
char data = preOrder[0]; //第一个为树结点的值
treeNode->data = data;
int pos = inOrder.find(data); //找到data在inOrder中的位置
/**
* string.substr(startIndex, length) 截取子串:从startIndex开始往后length个长度
* string.substr(startIndex) 截取子串:从startIndex开始一直到结尾
*/
treeNode->leftChild = rebuild(preOrder.substr(1, pos), inOrder.substr(0, pos));
treeNode->rightChild = rebuild(preOrder.substr(pos + 1),
inOrder.substr(pos + 1));
return treeNode;
}
/**
* 后序遍历
* @param root
*/
void PostOrder(TreeNode* root) {
if (root == NULL) {
return;
}
PostOrder(root->leftChild);
PostOrder(root->rightChild);
printf("%c", root->data);
}
int main() {
char preOrder[30];
char inOrder[30];
while (scanf("%s %s", preOrder, inOrder) != EOF) {
TreeNode* treeNode;
treeNode = rebuild(preOrder, inOrder);
PostOrder(treeNode);
printf("\n");
}
}