33,311
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int key;
char data;
struct node *lchild,*rchild;
}BSTnode; //二叉排序树结点
void deletep(BSTnode **bt) //书上形参是引用,但我用的是C,就换成二级指针了
{
BSTnode *q;
q=*bt;
*bt=(*bt)->rchild; //为什么这里赋值右孩子之后,它的父结点就指向它了?
free(q);
}
int deletek(BSTnode **bt,int k)
{
if(bt==NULL)
return 0;
else if(k==(*bt)->key)
{
deletep(bt);
return 1;
}
else if(k<(*bt)->key)
return deletek(&(*bt)->lchild,k);
else
return deletek(&(*bt)->rchild,k);
}
*bt=(*bt)->rchild;
就相当于*(p->leftNode)=*(p->leftNode)->rchild;
我相信你能明白