您的位置:首页 > 其它

机试指南-根据二叉树的前序和中序确定后序序列

2018-03-10 22:23 399 查看
不难。
#include<stdio.h>
 #include<stdlib.h>
 #include<string.h>
 struct node
 {
node *lchild;
node *rchild;
char c;
}tree[50];
int loc;
node *creat()
{
tree[loc].lchild=tree[loc].rchild=NULL;
return &tree[loc++];
}
char str1[30],str2[30];
void postorder(node *t)
{
if(t->lchild!=NULL){
postorder(t->lchild);
}
if(t->rchild!=NULL){
postorder(t->rchild);
}
printf("%d",t->c);
}
node *bulid(int s1,int e1,int s2,int e2)
{
node *ret=creat();
ret->c=str1[s1];
int rootid;
for(int i=s2;i<e2;i++)
{
if(str2[i]==str1[s1])
{
rootid=i;
break;
}
}
if(rootid!=s2){
ret->lchild=bulid(s1+1,s1+(rootid-s2),s2,rootid-1);
}
if(rootid!=e2){
ret->rchild=bulid(s1+(rootid-s2)+1,e1,rootid+1,e2);
}
return ret;

}
int main()
{
int l1,l2;
loc=0;
while(scanf("%s",str1)!=EOF)
{
scanf("%s",str2);
l1=strlen(str1);
l2=strlen(str2);
node *t=bulid(0,l1-1,0,l2-1);
postorder(t);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: