2012-12-01 58 views
0

我的BST只有一個節點。我寫了一個代碼來刪除那個節點,但它仍然存在。就像它沒有被更新。這是我簡單的代碼,只是爲了測試的情況下刪除BST中的唯一節點

void Delete(BSTree* tree, int& key) 
{ 
    if (key == tree->key) 
     tree=NULL; 
} 

而且我BSTree類沒有一個parrent一部分。只是值和左右指針。我的代碼有什麼問題?謝謝!

回答

1

你沒有改變實際tree指針。你只是改變堆棧上分配的指針,指向與傳入指針相同的地址。

你想BSTree *&tree這樣你就可以得到對原始指針的引用,所以任何改變都會影響它。

至於阿爾斯指出,不要忘記釋放內存,除了上面。

+0

非常感謝!它的工作:) –

+0

還有一件事,我有一個代碼來顯示樹,如果它是NULL我會cout << NULL;但它就像一個...空樹不是一個空的樹? –

+0

這取決於'NULL'對你的樹意味着什麼。在你的顯示函數中,你應該在實際顯示它之前最好停在'NULL'(你在嘗試處理它之前明顯停止,否則它會崩潰)。 – pickypg