#include<iostream>
#include<unordered_map>
using namespace std;
const int N=70;
int n;
char preorder[N],inorder[N];
unordered_map<char,int> l,r,pos;
char build(int prel,int prer,int inl,int inr)
{
char root=preorder[prel];
int k=pos[root];
if(inl<k) l[root]=build(prel+1,k-inl+prel,inl,k-1);
if(inr>k) r[root]=build(k-inl+prel+1,prer,k+1,inr);
return root;
}
void postvisit(char root)
{
if(l.count(root)) postvisit(l[root]);
if(r.count(root)) postvisit(r[root]);
cout<<root;
}
int main()
{
while(cin>>n,n)
{
cin>>preorder;
cin>>inorder;
for(int i=0;inorder[i];i++) pos[inorder[i]]=i;
char root=build(0,n-1,0,n-1);
postvisit(root);
cout<<endl;
l.clear();
r.clear();
pos.clear();
}
system("pause");
return 0;
}
HNU软件能力实训1-9. 二叉树遍历,从前序、中序到后序
最新推荐文章于 2024-04-26 02:00:00 发布