题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/44d91595c26f51b7144adce1f14952f5.png)
解答
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char TElemType;
typedef struct BiTNode{
TElemType data;
struct BiTNode* lchild;
struct BiTNode* rchild;
}BiTNode, *BiTree;;
char Pre[] = "ABDGEHICFJ";
char In[] = "GDBHEIAFJC";
BiTree BuildTree_pre_in(int pre_start, int pre_end, int in_start, int in_end){
BiTree T;
int i, LTreeLen, RTreeLen;
T = (BiTree)malloc(sizeof(BiTNode));
if(!T)
exit(0);
T->data = Pre[pre_start];
T->lchild = T->rchild = NULL;
i=in_start;
while(In[i]!=T->data)
i++;
LTreeLen = i-in_start;
RTreeLen = in_end - i;
if(LTreeLen)
T->lchild = BuildTree_pre_in(pre_start+1, pre_start+LTreeLen, in_start, i-1);
if(RTreeLen)
T->rchild = BuildTree_pre_in(pre_start+LTreeLen+1, pre_end, i+1, in_end);
return T;
}
BiTree Algo(){
int len_pre, len_in;
BiTree T;
len_pre = strlen(Pre);
len_in = strlen(In);
T = BuildTree_pre_in(0, len_pre-1, 0, len_in-1);
return T;
}
void PreOrderTraverse(BiTree T){
if(T){
printf("%c ",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T){
if(T){
InOrderTraverse(T->lchild);
printf("%c ",T->data);
InOrderTraverse(T->rchild);
}
}
int main(){
BiTree T;
printf("二叉树先序序列为:%s\n", Pre);
printf("二叉树中序序列为:%s\n", In);
printf("根据先序序列和中序序列创建二叉树...\n");
T = Algo();
printf("前序遍历该二叉树 T = ");
PreOrderTraverse(T);
printf("\n");
printf("中序遍历该二叉树 T = ");
InOrderTraverse(T);
printf("\n");
return 0;
}