#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string> #include<algorithm> using namespace std; //两个字符串,其长度n均小于等于26。 //第一行为前序遍历,第二行为中序遍历。 二叉树中的结点名称以大写字母表示:A,B,C....最多26个结点。 //输入样例可能有多组,对于每组测试样例, 输出一行,为后序遍历的字符串。 struct TreeNode { char data; TreeNode* left; TreeNode* right; }; TreeNode* RebuildTree(string strP, string strI) { if (strP.size() == 0) { return NULL; } char root = strP[0]; TreeNode* pnew = new TreeNode; pnew->data = root; int pos = strI.find(root); pnew->left = RebuildTree(strP.substr(1, pos), strI.substr(0, pos)); pnew->right = RebuildTree(strP.substr(pos + 1), strI.substr(pos + 1)); return pnew; } void PostOrder(TreeNode* proot) { if (proot == NULL) { return; } PostOrder(proot->left); PostOrder(proot->right); printf("%c", proot->data); } int main() { char strP[27]; char strI[27]; while (scanf("%s %s", strP, strI) != EOF) { TreeNode* proot; int n = 0; proot = RebuildTree(strP, strI); PostOrder(proot); printf("\n"); } return 0; }