帮忙:二叉搜索树 删除结点 算法出错
#include <stdlib.h>
#include <stdio.h>
typedef struct node{
char data;
struct node * left;
struct node * right;
}BST;
static BST * root;
void insert(char data){//生成
BST * current;
BST ** link;
link = &root;
while((current = *link) != NULL){
if(current->data> data){
link = ¤t->left;
}else if(current->data < data){
link = ¤t->right;
}else{
return;
}
}
current = (BST*)malloc(sizeof(BST));
current->data = data;
current->left = NULL;
current->right = NULL;
*link = current;
}
bool delete_node(BST *);
bool delete_BST(BST * n, char data){//删除
BST * current;
current = n;
if(current == NULL)
return false;
if(current->data == data){
return delete_node(current);
}else if(current->data > data){
return delete_BST(current->left,data);
}else{
return delete_BST(current->right,data);
}
}
bool delete_node(BST * p){//删除某个结点
BST * q,*s;
if(!p->left){ //left child is null
q = p;
p = p->right;
free(q);
q = NULL;
}else if(!p->right){//right child is null
q = p;
p = p->left;
free(q);
q = NULL;
}else{// both childs are not null
q = p;
s = p->left;
while(s->right){
q = s;
s = s->right;
}
p->data = s->data;
if(q == p){
q->left = s->left;
}else{
q->right = s->left;
}
free(s);
}
q = NULL;
s = NULL;
return true;
}
void mid_order(){//中序遍历
BST * current = root;
BST * stack[30];
int top = 0;
while(true){
while(current){
stack[top++] = current;
current = current->left;
}
if(top > 0){
top--;
current = stack[top];
printf("%c ",current->data);
current = current->right;
}else
return;
}
}
int main(){
char a = 'a';
char b = 'b';
char c = 'c';
insert(a);
insert(b);
insert(c);
mid_order();
printf("\n");
delete_BST(root,b);
mid_order();
printf("\n");
}
[解决办法]
我的下载页面有,去下载一个吧,要不你给我你的邮箱我发给你,我在大二做课程设计的时候做了一个基于排序二叉树的个人通信录,有详细的设计文档。
[解决办法]
做过一样的题。感觉还好,也有过BUG。但是自己用单步调试调出来了。建议LZ以后多多单步测试,自己解决了问题那是个很享受的过程~
[解决办法]
乱码传了两次,上面那段代码,就没问题了