UVA536 二叉树重建 Tree Recovery

  • 根据前序和中序遍历递归建树,输出后序遍历。
#include<iostream> 
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
char tr1[35],tr2[35],tr3[35];
int num=1,ans;
struct node{
	int l,r;
	char a;
}n[305];
int build(int l1,int r1,int l2,int r2,int root)
{
	if(l1>r1) return 0;
 	int x=l2;
 	n[root].a=tr1[l1-1];
	char c=tr1[l1-1];
	while(tr2[x-1]!=c) x++;
	n[root].l=build(l1+1,l1+x-l2,l2,x-1,++num);
	n[root].r=build(l1+x-l2+1,r1,x+1,r2,++num);
	return root;
}
void gt(int x)
{
	if(n[x].l)
	gt(n[x].l);
	if(n[x].r)
	gt(n[x].r);
	tr3[++num]=n[x].a;
}
void intt()
{
	for(int i=1;i<=200;i++)
	n[i].l=n[i].r=0;
	num=1;
}
int main()
{
	while(cin>>tr1)
	{
		getchar();
		cin>>tr2;
		ans=strlen(tr2);
		build(1,ans,1,ans,1);
		num=0;
		gt(1);
		for(int i=1;i<=num;i++)
		cout<<tr3[i];
		cout<<endl;
		intt();
		getchar();
	}
}
上一篇:一些问题


下一篇:mongodb大数据分页