Это место, где я пытаюсь решить эту конкретную проблему: http://mycodeschool.com/work-outs/binary-search-trees/7C++ Удаление узла из бинарного дерева поиска
В случае узел будет удален имеет как дети, стратегия принять, чтобы заменить, что узел с максимальным значением в левом поддереве (позволяет называть его MAX_LEFT). Затем вы можете просто удалить узел MAX_LEFT. Эта стратегия также обсуждается в нашем видео для этой проблемы.
Я пытаюсь решить эту проблему, используя код ниже. Но есть некоторые проблемы, и я не получаю ожидаемого результата.
struct Node
{
int data;
struct Node* left;
struct Node* right;
}
Node* FindMax(Node* root)
{
if(root==NULL)
return NULL;
while(root->right != NULL)
{
root = root->right;
}
return root;
}
Node* DeleteNodeInBST(Node* root,int data)
{
if(root==NULL) return root;
else if(data<=root->data)
root->left = DeleteNodeInBST(root->left, data);
else if (data> root->data)
root->right = DeleteNodeInBST(root->right, data);
else
{
//No child
if(root->right == NULL && root->left == NULL)
{
delete root;
root = NULL;
}
//One child
else if(root->right == NULL)
{
Node* temp = root;
root= root->left;
delete temp;
}
else if(root->left == NULL)
{
Node* temp = root;
root= root->right;
delete temp;
}
//two child
else
{
Node* temp = FindMax(root->left);
root->data = temp->data;
root->left = DeleteNodeInBST(root->left, temp->data);
}
}
return root;
}
Попробуйте запустить в отладчике и выполните код за строкой. Кроме того, если у вас возникла проблема с неожиданным выходом, то, пожалуйста, покажите как фактический, так и ожидаемый результат. Было бы также очень полезно видеть, как вы используете эти функции (т. Е. Пытаетесь создать [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve)). –
вместо того, чтобы писать «Но есть некоторые проблемы», описывают, что вы ввели, что вы ожидаете и что получаете. –
Это место, где я пытаюсь решить эту проблему: http://mycodeschool.com/work-outs/binary-search-trees/7 – ABCD