当我试图找到我的删除功能的最大值时,我的程序不断破坏。我想要做的是用最大的左树覆盖用户想要删除的内容,然后删除该节点。一旦到达第一个Else,它就会一直断裂。递归正在打破我的想法。我的缺点在哪里?二叉搜索树递归删除
这是带有其私有递归兄弟的remove函数。
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