您的位置:首页 > 其它

重建二叉树

2014-11-02 17:29 232 查看

重建二叉树

描述

题目很简单,给你一棵二叉树的后序和中序序列,求出它的前序序列(So easy!)。

输入输入有多组数据(少于100组),以文件结尾结束。 每组数据仅一行,包括两个字符串,中间用空格隔开,分别表示二叉树的后序和中序序列(字符串长度小于26,输入数据保证合法)。输出每组输出数据单独占一行,输出对应得先序序列。样例输入
ACBFGED ABCDEFG
CDAB CBAD

样例输出
DBACEGF
BCAD


#include <iostream>
#include <string.h>
using namespace std;

struct tree
{
char data;
tree *left;
tree *right;
};

tree *converse(char *pos,char *in,int n,int m)
{
tree *b;
int k=0;
char *p,*q,*maxp;
int maxpost,maxin;
if(n<=0)
{
return NULL;

}
maxpost=-1;

for(p=in;p<in+n;p++)
for(q=pos;q<pos+m;q++)
if(*p==*q)
{
k=q-pos;
if(k>maxpost)
{
maxpost=k;
maxp=p;
maxin=p-in;
}
}

b=new tree;
b->data=pos[maxpost];

b->left=converse(pos,in,maxin,m);
b->right=converse(pos,maxp+1,n-maxin-1,m);
return b;
}

void pre(tree *b)
{
if(b)
{
cout<<b->data;
pre(b->left);

pre(b->right);
}
}

int main()
{
char c1[1000],c2[1000];
while(cin>>c1>>c2)
{
tree *b;
b=converse(c1,c2,strlen(c1),strlen(c2));
pre(b);

cout<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: