I am using this function to remove a node from a binary tree. It works fine in most situations. Often though it will leave either the left or right pointer from a parent null. So when I go to display it the program just blows up. Thanks for any ideas.
Code:
Node *Btree::remove(Node *root,int key)
{
Node *index = NULL;
Node *index2 = NULL;
if(!root)
return root;
if((root->getData())== key)
{
if(root->getLeft() == root->getRight())
{
delete root;
return NULL;
}
else if(!root->getLeft())
{
index = root->getRight();
delete root;
return index;
}
else if(!root->getRight())
{
index = root->getLeft();
delete root;
return index;
}
else
{
index2 = root->getRight();
index = root->getRight();
while(index->getLeft())
index = index->getLeft();
index->setLeft(root->getLeft());
delete root;
return index2;
}
}
if(root->getData() < key)
root->setRight(remove(root->getRight(),key));
else
root->setLeft(remove(root->getLeft(),key));
return root;
}