我正試圖從二叉樹函數中刪除。我有點失落,所以我試圖處理它的情況下,開始如果我試圖刪除的價值是在BST的根。爲了測試我的函數,我首先調用printcontents()函數來打印樹的所有內容,然後調用remove(8)[8此時是我的根目錄中的值),然後調用printcontents( )。我這樣做的方式是試圖用樹左側的「最右側」值替換根。當我第二次調用printcontents時,它會正確打印新的根值,但當它繼續打印內容並達到該值以前的位置時,它將有一個隨機的長整數「-572 ......」 (雖然我不認爲這個數字很重要),然後我的程序崩潰了。我看到我的根的價值正在被取代,但之後會發生什麼?從二叉搜索樹中刪除
這是我的刪除功能:
void BinarySearchTree::remove(int value) {
Node* tmp = head;
Node* tmp2 = head;
if (head->data == value && head->left != NULL) {
tmp=tmp->left;
while (tmp->right != NULL) {
tmp=tmp->right;
}
while (tmp2->right->right != NULL) {
tmp2=tmp2->right;
}
if (tmp->left == NULL) {
head->data = tmp->data;
tmp2->right = NULL;
delete tmp;
}
if (tmp->left != NULL) {
head->data = tmp->data;
tmp2->right = tmp->left;
delete tmp;
}
}
這顯然是不完整的,但我也測試只能處理其中的根源去除,並且左側由最右邊的值替換的情況下樹(假設有一個左邊,有),並且我覺得它在邏輯上應該是有效的,所以也許是當我「刪除tmp」時出現錯誤。我不知道發佈我的整個程序是否必要,但如果是這樣,請告訴我!
永遠不會被忽視如此糟糕大聲笑 – FrostyStraw