I was learning Binary search tree(BST). In BST Insertion, Inorder, Preorder traversal, Postorder traversal operations work fine but after deletion, some problems occur. I have learned BST deletion operation from here: https://gist.github.com/mycodeschool/9465a188248b624afdbf . I have written the same program but after deletion in place of deleted element it shows 0. and sometimes in insertion operation is shows Segmentation fault (core dumped). My code is here: (I have taken 3 cases where node which we are deleting have 1.No child 2. 1 child 3. 2 child)
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;
}