需要注意的点:在创建二叉树的函数中,如果len1==len2==0,一定要把(*T)置为NULL然后退出循环
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct TreeNode
{
char data;
struct TreeNode* LChild, *RChild;
}TreeNode;
void Create(TreeNode** T, char *s1, int len1, char *s2, int len2)
{
if(len1==0)
{
(*T) = NULL;
return;
}
(*T) = (TreeNode*)malloc(sizeof(TreeNode));
if(len1==1)
{
(*T)->data = s1[0];
(*T)->LChild = 0;
(*T)->RChild = 0;
return;
}
char root = s1[0];
int rp = 0;
for(rp = 0; rp < len1; rp++)
{
if(s2[rp]==root)
break;
}
(*T)->data = s1[0];
Create(&(*T)->LChild,s1+1,rp,s2,rp);
Create(&(*T)->RChild,s1+1+rp,len1-rp-1,s2+rp+1,len1-rp-1);
}
void Print(TreeNode *T)
{
if(!T)
return;
Print(T->LChild);
Print(T->RChild);
printf("%c",T->data);
}
int main()
{
static char s1[10000];
static char s2[10000];
scanf("%s",s1);
scanf("%s",s2);
int lenth = strlen(s1);
TreeNode *T;
Create(& T, s1, lenth, s2, lenth);
Print(T);
return 0;
}
/*
in:
ABDFGCEH
BFDGACEH
out:
FGDBHECA
*/