這應該是遍歷一個BST並刪除每個節點,包括根節點。然而,最後,我得到了「root還有一個左節點」的消息。爲什麼並非所有節點都被刪除?爲什麼我的C++代碼無法刪除BST中的所有節點?
void deleteTree()
{
deleteNode(root);
if(root->right)
cout << "root still has a right node" << endl;
if(root->left)
cout << "root still has a left node" << endl;
root = 0;
}
void deleteNode(node *p)
{
if(p->left)
{
deleteNode(p->left);
p->left = 0;
}
if(p->right)
{
deleteNode(p->right);
p->right = 0;
}
cout << "Deleting node containing " << p->data << endl;
delete p;
}
爲什麼當它檢查正確的節點時,它找不到任何東西,但是當它檢查左節點時它找到了什麼? – neuromancer 2010-02-11 03:14:51
因爲'root'只是指向垃圾內存。其他結果可能包括只剩下,既不,也不會崩潰。 – Potatoswatter 2010-02-11 03:44:43