#include<stdio.h>
#include<string.h>
char a[100],b[100],c[1000]; //a中存放先序输入,B中存放后续输入,c中构造数
void creat(int First,int Middle,int Long,int Tree){ //此函数由先序和中序构造树
int i,j;
if(Long>0){
c[Tree]=a[First];
for(i=Middle;i<Middle+Long;i++){
if(a[First]==b[i]) break;
}
j=i-Middle;
creat(First+1,Middle,j,2*Tree);
creat(First+j+1,i+1,Long-j-1,2*Tree+1);
}
}
void order(int Node){ //此函数后续遍历
if(c[Node]!='/0'){
order(2*Node);
order(2*Node+1);
printf("%c",c[Node]);
}
}
int main(){
int i,j,m,n;
while(scanf("%s %s",a,b)!=EOF){
memset(c,'/0',sizeof(c));
creat(0,0,strlen(a),1);
order(1);
printf("/n");
}
return 0;
}
#include<string.h>
char a[100],b[100],c[1000]; //a中存放先序输入,B中存放后续输入,c中构造数
void creat(int First,int Middle,int Long,int Tree){ //此函数由先序和中序构造树
int i,j;
if(Long>0){
c[Tree]=a[First];
for(i=Middle;i<Middle+Long;i++){
if(a[First]==b[i]) break;
}
j=i-Middle;
creat(First+1,Middle,j,2*Tree);
creat(First+j+1,i+1,Long-j-1,2*Tree+1);
}
}
void order(int Node){ //此函数后续遍历
if(c[Node]!='/0'){
order(2*Node);
order(2*Node+1);
printf("%c",c[Node]);
}
}
int main(){
int i,j,m,n;
while(scanf("%s %s",a,b)!=EOF){
memset(c,'/0',sizeof(c));
creat(0,0,strlen(a),1);
order(1);
printf("/n");
}
return 0;
}
本文介绍了一种使用先序遍历和中序遍历构造二叉树的方法,并通过递归实现。构造好的二叉树可以进行后续遍历输出。代码采用 C 语言实现,适合初学者学习二叉树的基本概念和操作。

2397

被折叠的 条评论
为什么被折叠?



