具体代码
#include <iostream>
#include <string>
using namespace std;
struct Node
{
char data;
Node* left,*right;
};
const int maxn=26+4;
struct MemPool
{
Node mem[maxn];
int cnt;
void init()
{
cnt=0;
}
Node* newNode(int td,Node*l,Node* r)
{
Node* t=&mem[cnt++];
t->data=td;
t->left=l;
t->right=r;
return t;
}
};
MemPool nodePool;
string preStr,inStr;
Node* buildTree(int pre,int inI,int inJ)
{
if(inJ>inI)
{
int i;
for(i=inI;i<inJ;++i)
{
if(inStr[i]==preStr[pre])
break;
}
Node* l=buildTree(pre+1,inI,i);
Node* r=buildTree(pre+i-inI+1,i+1,inJ);
Node* root=nodePool.newNode(preStr[pre],l,r);
return root;
}
else
return 0;
}
void postOrder(Node* root)
{
if(root==0)
return;
postOrder(root->left);
postOrder(root->right);
cout<<root->data;
}
int main()
{
while(cin>>preStr>>inStr)
{
nodePool.init();
Node* root=buildTree(0,0,inStr.size());
postOrder(root);
cout<<endl;
}
return 0;
}