c语言二叉排序树的创建与查找,C语言实现二叉查找树的插入和删除操作问题求教...

使用C语言实现二叉查找树的插入和删除操作,但在

return searchBST( T->rchild, val, f, p);出错。这里应该使用了双指针,求教应该怎么改才正确。

/*

+----------------------------------------------------------------------+

| 这里实现二叉排序树的插入和删除操作

+----------------------------------------------------------------------+

| Author: Sean |

+----------------------------------------------------------------------+

*/

#include

#include

#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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值