我正在学习二进制搜索树(BST) . 在BST插入,顺序,前序遍历,后序遍历操作工作正常但删除后,会出现一些问题 . 我从这里学习了BST删除操作:https://gist.github.com/mycodeschool/9465a188248b624afdbf . 我编写了相同的程序,但删除后删除元素,它显示0.有时在插入操作中显示分段错误(核心转储) . 我的代码在这里:(我已经采取了3个案例,其中我们删除的节点有1.No孩子2. 1孩子3. 2孩子)
void Inorder(struct node *tree)
{
if(tree == NULL)
{
return;
}
Inorder(tree->left);
cout<<tree->data<<" ";
Inorder(tree->right);
}
node* FindMin(struct node *tree)
{
while(tree->left != NULL)
{
tree=tree->left;
}
return tree;
}
node* Delete(struct node *tree,int data)
{
if(tree == NULL)
{
return tree;
}
else if(tree->data < data)
{
tree->right=Delete(tree->right,data);
}
else if(tree->data > data)
{
tree->left=Delete(tree->left,data);
}
else
{
if(tree->right==NULL && tree->left == NULL)
{
delete tree;
tree==NULL;
}
else if(tree->right==NULL)
{
struct node *newnode = tree;
tree=tree->left;
delete newnode;
}
else if(tree->left == NULL)
{
struct node *newnode = tree;
tree=tree->right;
delete newnode;
}
else
{
struct node *newnode = FindMin(tree->right);
tree->data=newnode->data;
tree->right=Delete(tree->right,newnode->data);
}
}
return tree;
}
1 回答
在这里,树应该设置为null