69,373
社区成员
发帖
与我相关
我的任务
分享
void delte(binarytree **tree,Type data){
binarytree *p,*parent;
if(*tree == NULL)
printf("empty tree,illegal to delte\n");
if((p = search(*tree,parent,data)) != NULL){
if(p->leftch == NULL && p->rightch == NULL){//叶子节点
if(p->data < parent->data)//左叶子节点
parent->leftch = NULL;
else//右叶子节点
parent->rightch = NULL;
p = NULL;
printf("11111\n");
}
else if(p->leftch == NULL || p->rightch == NULL){//有一个子节点的节点
binarytree *temp = (p->leftch==NULL)?p->rightch:p->leftch;
printf("22222\n");
if(p->data > parent->data)//且该节点是父节点的右子节点
parent->rightch = temp;
else
parent->leftch = temp;//且该节点是父节点的左子节点
p = NULL;
}
else{//有两个子节点
printf("33333\n");
p->rightch->leftch = p->leftch;
p->rightch->rightch = NULL;
parent->leftch = p->rightch;
p = NULL;
}
}
else
printf("no data matched\n");//没有该值的节点
}