大佬们帮忙看看这个二叉搜索树哪错了

先创立一个符合二叉搜索树的树,再进行查找key,找到便使指针p指向找到的位置,找不到便返回最后的位置,不知道哪错了;

#include<stdio.h>
#include<stdlib.h>

typedef char elemtype;

enum {FALSE,TRUE};

typedef struct tree
{
    elemtype data;
    struct tree *lchild;
    struct tree *rchild;
}BiTNode,*BiTree;

void CreatBiTree(BiTree* fm)
{
    fm=(BiTree*)malloc(sizeof(BiTNode));
    scanf("%c",&(*fm)->data);
    //getchar();
    if((*fm)->data!=' ')//以空格表示没有子节点
    {
    CreatBiTree(&(*fm)->lchild);
    CreatBiTree(&(*fm)->rchild);
    }
}

int SearchBiTree(BiTree Node,int key,BiTNode *f,BiTNode *p)
{
    if(!Node)
    {
        *p=*f;
        return FALSE;
    }

    if(key==Node->data)
    {
        *p=*Node;
        return TRUE;
    }

    if(key<Node->data)
    {
        SearchBiTree(Node->lchild,key,Node,p);
    }

    if(key>Node->data)
    {
        SearchBiTree(Node->rchild,key,Node,p);
    }
}

int main()
{
    printf("以前序遍历创建二叉树并使其符合二叉搜索树的特征\n"); 
    BiTree root;
    CreatBiTree(&root);
    elemtype key;
    printf("输入需要搜索的值\n");
    scanf("%c",&key);
    BiTree f,p;
    f=(BiTree)malloc(sizeof(BiTNode));
    p=(BiTree)malloc(sizeof(BiTNode));
    f=NULL;
    SearchBiTree(root,key,f,p);

    return 0;
}

不往下看了,void CreatBiTree(BiTree* fm) 这里就不对,你主程序里定义的root,在这个函数里指向分配的地址,但是不会作用到主程序root上
导致你的root是野指针,