需要注意的点:在创建二叉树的函数中,如果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
*/