Моя программа продолжает ломаться, когда я пытаюсь найти максимум моей функции удаления. То, что я пытаюсь сделать, это перезаписать то, что пользователь хочет удалить с максимальным левым деревом, а затем удалить этот узел. Он продолжает ломаться, когда достигает первого. Рекурсия разрушает мой разум. Где мой недостаток?Двоичное дерево поиска Рекурсивное удаление
Это функция удаления со своим частным рекурсивным родным братом.
template<typename TYPE>
bool BinarySearchTree<TYPE>::remove(TYPE& data)
{
bool found = search(dataOut);
if(found)
TRoot = Premove(TRoot, data);
return found;
}
template<typename TYPE>
Node<TYPE>* BinarySearchTree<TYPE>::Premove(Node<TYPE>* root, TYPE& data)
{
Node<TYPE>* del;
Node<TYPE>* max;
if(root)
{
if(root->data > data)
root->left = Premove(root->left, data);
else if(root->data < data)
root->right = Premove(root->right, data);
else
{
if(root->left && root->right)
{
max = root->left;
while(max->data < max->right->data)
max = max->right;
root->data = max->data;
max = Premove(root, max->data);
}
else
{
del = root;
root = (root->right) ? root->right : root->left;
delete pDel;
}
}
}
return root;
}
Можете ли вы описать, что означает «нарушение»? (Что касается кода, а не вашего разума) –
Ну, кажется, это нормально, но тогда, когда я пытаюсь удалить 'max', он просто переходит в бесконечный цикл. – Derp