當我試圖找到我的刪除功能的最大值時,我的程序不斷破壞。我想要做的是用最大的左樹覆蓋用戶想要刪除的內容,然後刪除該節點。一旦到達第一個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