UVA536 Tree Recovery

来源:互联网 发布:sql on hadoop 编辑:程序博客网 时间:2024/06/05 19:19

基础到不能再基础的。。数据结构题?(雾)

pre_order的字符串找到树根,然后在in_order中找到树根,将树划分为左右子树。。递归求解即可。

AC代码如下。

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int left[26];int right[26];char pre_order[26];char in_order[26];int build(int pre_start,int pre_end,int in_start,int in_end){int root=pre_order[pre_start]-'A';if(pre_end-pre_start==1) return pre_order[pre_start]-'A';if(pre_end<=pre_start) return -1;int mid=find(&in_order[in_start],&in_order[in_end],pre_order[pre_start])-in_order;int pos=pre_start;for(int i=in_start;i<mid;i++)        pos=max(pos,(int)(find(&pre_order[pre_start],&pre_order[pre_end],in_order[i])-pre_order));        left[root]=build(pre_start+1,pos+1,in_start,mid);        right[root]=build(pos+1,pre_end,mid+1,in_end);        return root;}void print(int root){if(root==-1)return;else{print(left[root]);print(right[root]);printf("%c", root+'A');}}int main(){while(scanf("%s",pre_order)!=EOF){memset(right,-1,sizeof(right));memset(left,-1,sizeof(left));scanf("%s", in_order);int l=strlen(in_order);int root=build(0,l,0,l);print(root);printf("\n");}return 0;}


0 0
原创粉丝点击