C语言二叉查找树

C语言二叉查找树问题,在 return searchBST( T->rchild, val, f, p); 处出错,求教出错原理,这里应该涉及了双重指针的问题,我理不清。


#include <stdio.h>

#include <malloc.h>

#define OK 1

#define TRUE 1

#define ERROR -1

#define FALSE 0


typedef int ElemType;

typedef struct Node

{

    ElemType data;

    struct Node *lchild,*rchild;

}NODE,*PNODE;


//prompt error info and exit.

void errorInfo(char str[])

{

    printf("%s\n",str);

    exit(-1);

}


//prompt error if there is an error in locating memory

void mallocErr(PNODE p)

{

    if(NULL==p)

        errorInfo("Error in locating memory.");

}


//search binary sort tree

int searchBST(PNODE T,int val,PNODE *f,PNODE *p)

{

    if(!T)

    {

        *p = *f;

        return FALSE;

    }

    else if(val == T->data)

    {

        *p = T;

        return TRUE;

    }else if(val < T->data)

    {

        printf("run this code 52\n");

        *f = T;

        return searchBST(T->lchild,val,f,p);

    }else

    {

        printf("run this code 56\n");

        *f = T;

        printf("run this code 58\n");

        printf("T->data : %d \n",T->data);

        //运行到此处出错

        return searchBST( T->rchild, val, f, p);

    }

}


int insertBST(PNODE *T,int val)

{

    PNODE p = NULL, s = NULL,f = NULL;

    int res = 0;

    res = searchBST(*T,val,&f,&p);

    if(!res) //val does not exist in the array.

    {

        s = (PNODE)malloc(sizeof(NODE));

        mallocErr(s);

        s->data = val;


        if(!p) //p is null

        {

            printf("run this code 75\n");

            printf("Create Tree with val:%d\n",val);

            *T = s;

        }else if(val < p->data)

        {

            printf("run this code 79\n");

            printf("Insert Key To Tree(left):%d\n",val);

            p->lchild = s;

        }else

        {

            printf("run this code 84\n");

            printf("Insert Key To Tree(right):%d\n",val);

            p->rchild = s;

        }

        return TRUE;

    }else   //val already exists in the array.

    {

        return FALSE;

    }

}


int main()

{

    PNODE T = NULL, p = NULL;

    insertBST(&T,100);

    insertBST(&T,199);


    return 0;

}


一执1929
浏览 1790回答 1
1回答

SapereAudor

建议你直接问老师,然后再自己整理一遍。
打开App,查看更多内容
随时随地看视频慕课网APP