#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node{
char data;
struct node * left;
struct node * right;
};
node * now;
int root=0;
struct node* createtree(char * pre,char * mid,int start,int end){
struct node * n;
n=(struct node*)malloc(sizeof(struct node));
n->data=pre[root];
if(start==end){
n->left=NULL;
n->right=NULL;
}
else{
// printf("afsdfddddd\n");
int pos;
//int pos=strchr(mid,pre[root]);
for(int index=start;index<=end;index++)
{
if(mid[index]==pre[root]){
pos=index;
break;
}
}
if(pos==start){
n->left=NULL;
}
else{
root++;
n->left=createtree(pre,mid,start,pos-1);
}
if(pos==end){
n->right=NULL;
}
else{
root++;
n->right=createtree(pre,mid,pos+1,end);
}
}
return n;
}
void deletetree(node * root){
if(root->left!=NULL)
deletetree(root->left);
if(root->right!=NULL){
deletetree(root->right);
}
free(root);
}
void postorder(node * root){
if(root->left!=NULL){
postorder(root->left);
}
if(root->right!=NULL){
postorder(root->right);
}
printf("%c",root->data);
}
struct node * root2;
int main(){
char pre[27];
char mid[27];
while(scanf("%s%s",pre,mid)!=EOF){
// printf("%s %s\n",pre,mid);
root=0;
root2=createtree(pre,mid,0,strlen(mid)-1);
// printf("afsdfddddd\n");
postorder(root2);
printf("\n");
deletetree(root2);
}
return 0;
}
本文介绍了一种根据先序遍历和中序遍历构建二叉树的方法,并实现了相应的C语言程序。该程序通过递归方式创建二叉树节点,并采用后序遍历输出构建好的二叉树结构。
1069

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



