POJ 2255 Tree Recovery [二叉树]

题意:

给前序和中序,求后序便利。

思路:

惭愧,把最原始的都忘了,记得这应该是数据结构的例题之类的知识。

所以特地把最原始的树也构造一遍,再后序输出,练练手。


#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
#include<queue>
#include<cmath>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define Abs(a) ((a)>0?(a):(-(a)))
#define llong long long int
using namespace std;
const int N=30;
const int inf=(1<<30);
int n,m;
char str1[N],str2[N];
struct Node
{
	int father;
	int leftson;
	int rightson;
}node[N];
void preorder(char * s1,char * s2,int len,int pre,int son)//rebuild the tree
{
	int now=s1[0]-'A'+1;
	if(len==1)
	{
		if(son)
			node[pre].rightson=now;
		else
		  node[pre].leftson=now;
		node[now].father=pre;
		return;
	}
	int pos;
	for(pos=0;pos<len;pos++)
	{
		if(s2[pos]==s1[0])
		{
			break;
		}
	}
	if(pos)
	{
		preorder(s1+1,s2,pos,now,0);
	}
	if(len-pos-1)
	{
		preorder(s1+pos+1,s2+pos+1,len-pos-1,now,1);
	}
	if(son)
	  node[pre].rightson=now;
	else
	  node[pre].leftson=now;
	node[now].father=pre;
}
void print_pod(int now)
{
	if(!now)
	  return;
	print_pod(node[now].leftson);
	print_pod(node[now].rightson);
	printf("%c",now+'A'-1);
}
int main()
{
	while(scanf(" %s %s",str1,str2)!=EOF)
	{
		memset(node,0,sizeof(node));
		n=strlen(str1);
		preorder(str1,str2,n,0,0);
		print_pod(str1[0]-'A'+1);
		printf("\n");
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值