#include <iostream> #include <string> using namespace std; struct TreeNode{ char data; TreeNode *left,*right; TreeNode(char c):data(c),left(nullptr),right(nullptr){} }; int index(char a,string in){ int i; for(i=0;i<in.length();i++){ if(in[i]==a)return i; } return 0; } TreeNode *BTree(string pre,string in,int len){ if(len<=0)return nullptr; TreeNode *root; root=new TreeNode(pre[0]); int i; i=index(pre[0], in); root->left=BTree(pre.substr(1,pre.length()-1),in.substr(0,i),i); root->right=BTree(pre.substr(i+1,pre.length()-i),in.substr(i+1,in.length()-i-1),len-i-1); return root; }//根据先序遍历结点来分割序列,分为左子树和右子树,递归生成树 void PostOrder(TreeNode *root){ if(root==nullptr)return; PostOrder(root->left); PostOrder(root->right); cout<<root->data; }//后序遍历的基础写法 int main() { string a, b; while (cin>>a>>b) { if(a=="")break; TreeNode *root=nullptr; root=BTree(a,b,a.length()); PostOrder(root); cout<<endl; } } // 64 位输出请用 printf("%lld")