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

本文介绍了一种使用后序遍历构建二叉树的方法,并提供了完整的C语言实现代码。通过输入二叉树的前序遍历序列和中序遍历序列,程序能够构建出对应的二叉树并输出其后序遍历结果。

不难。

#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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值