1
void Delete(Node* &root,int data){
    if(root == NULL)
            return;
    if(root -> key > data)
            Delete(root->left,data);
    else if(root -> key < data)
            Delete(root->right,data);
    else{
            // key found ;
            if(root-> left == NULL && root->right ==NULL)
            {
                    delete(root);
                    return;
            }
            else if(root -> left != NULL && root->right == NULL){
                    root -> key = root-> left->key;
                    delete(root -> left);
                    return;
            }
            else if(root -> left == NULL && root->right !=NULL){
                    root->key = root ->right->key;
                    delete(root -> right);
                    return;
            }
            else{
                    Node* temp = root->right;
                    while(temp -> left != NULL)
                            temp = temp -> left;
                    int key = temp -> key;
                    delete(temp);
                    Delete(root,key);
                    root -> key = key;
                    return;
            }
    }

}

If I try to delete any node say node with value 50 instead of deleting it is just making it 0 based on the output I receive. Before deleting 50 inorder:-

20 30 40 50 60 70 80 

After deleting 50 inorder:-

20 30 40 0 60 70 80 
rv7
  • 37
  • 5

1 Answers1

0

you have to delete/erase the right-node of the root (since you finding smallest in right subtree), not the root itself. the problem will arise when the node to be deleted having both child (left and right). change your code like following --

Node* temp = root->right;
while(temp -> left != NULL)
        temp = temp -> left;
int key = temp -> key;
delete(temp);
Delete(root->right,key); // modified this line
root -> key = key;

rest of the thing are well and okay! : D

Papai from BEKOAIL
  • 1,469
  • 1
  • 11
  • 17
  • No difference New output for the same: 20 30 40 50 60 70 0. 0 moved to end – rv7 Nov 14 '19 at 14:24
  • Also, I am deleting the node with key = smallest value in the right subtree of root. So it won't make a difference if I delete from root or root -> right. My code will first find the key then delete that particular root. – rv7 Nov 14 '19 at 14:27