2016-11-16 39 views
0
else if (left == NULL) { 
    Node *tempNode = new Node(); 
    tempNode = right; 
    tempNode = right; 
    tempNode->parent = parent; 
    if (t < parent->data) parent->left = tempNode; 
    if (t > parent->data) parent->right = tempNode; 
    delete this; 
    } 

這是我的代碼,用於在父代只有一個子代時刪除二叉搜索樹的fcn。它刪除了我要刪除的節點,但也刪除了它後面的所有節點。請幫忙。刪除二叉搜索樹不能正常工作的函數

+0

對不起。我忘了提到這一點。我的錯。是的,C++。感謝您指出 –

+0

什麼是't'?如果你能向我們展示整個功能,看起來會更好。 – ydoow

回答

0

在執行delete this之前,您需要清零自己的左指針和右指針。否則你的左右子樹也會被刪除(假設你已經正確地寫了你的析構函數)。

如果可能的話,您需要考慮t == parent->data的情況;否則刪除多餘的t > parent->data測試並使用else

而且肯定不需要分配new Node()。您將在下一行中分配變量。不要這樣寫代碼。

它應該是:

Node *tempnode = right; 
right->parent = this->parent; 
right = nullptr; 
// etc.