@Zielony12, Ta funkcja musi mieć dwa parametry, bo jest wywoływana rekurencyjnie. Dodatkowo ta funkcja może usunąć obiekt root, więc nie powinna być metodą klasy BuildandReconstructBST.
Tak bym zrobił:
class BSTTree
{
private:
BuildandReconstructBST* delete_element(BuildandReconstructBST* root, int key)
{
if (root == NULL) return root;
if (key < root->value)
{
root->left = delete_element(root->left, value);
}
else if (key > root->value)
{
root->right = delete_element(root->right, value);
}
else
{
if (root->left == NULL)
{
BuildandReconstructBST *temp = root->right;
delete root;
return temp;
}
else if (root->right == NULL)
{
BuildandReconstructBST *temp = root->left;
delete root;
return temp;
}
BuildandReconstructBST *temp = FindMin(root->right);
root->value = temp->value;
root->right = delete_element(root->right, temp->value);
}
return root;
}
BuildandReconstructBST* root_node;
public:
...
void deleteElement(int key)
{
root_node = delete_element(root_node, key);
}
};
PS. przeniosłem posta z komentarza, bo w zasadzie to odpowiedź :)