#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 100
typedef struct btnode
{
char data;
btnode *lchild;
btnode *rchild;
}btnode;
btnode *create_tree(char pre_order[],char in_order[],int pre_l,int pre_r,int in_l,int in_r)
{
if(pre_l>pre_r) return NULL;
else
{
btnode *bt=(btnode*)malloc(sizeof(btnode));
bt->data=pre_order[pre_l];
bt->lchild=NULL;
bt->rchild=NULL;
int k;
for(k=in_l;k<=in_r;k++)
{
if(in_order[k]==pre_order[pre_l]) break;
}
bt->lchild=create_tree(pre_order,in_order,pre_l+1,pre_l+k-in_l,in_l,k-1);
bt->rchild=create_tree(pre_order,in_order,pre_l+k-in_l+1,pre_r,k+1,in_r);
return bt;
}
}
void DFS(btnode *bt)
{
if(bt!=NULL)
{
printf("%c",bt->data);
DFS(bt->lchild);
DFS(bt->rchild);
}
}
int main()
{
btnode *bt;
int size;
char pre_order[]="abcdefg";
char in_order []="cbdafeg";
size=sizeof(in_order)-1;
bt=create_tree(pre_order,in_order,0,size,0,size);
printf("\n\n\n");
DFS(bt);
printf("\n\n\n");
return 0;
}