由於某種原因,我的節點似乎並未被刪除。它看起來好像遍歷到了最後,但是在節點被「刪除」之後,它仍然有數據在其中。我也試過 free(bNode)
和bNode = NULL
而不是delete bNode
,但他們都給出了相同的結果。C++刪除整個二叉搜索樹
當我試圖調試時,cout
和顯示功能才放入。我只是不明白爲什麼它不工作,我希望我不會錯過簡單的東西。
struct
Book{
char title [50];
char url [75];
Book *left;
Book *right;
};
void deleteAllBooks (Book *bNode){
if(bNode==NULL) return;
if(bNode->left !=NULL){
cout << endl << "deleting left" << endl;
deleteAllBooks(bNode->left);
}
if(bNode->right !=NULL){
cout << endl << "deleting right" << endl;
deleteAllBooks(bNode->right);
}
cout << endl << "deleting node " << bNode->title << endl;
delete bNode;
displayBookTree(bNode);
}
void displayBookTree(Book *bNode){
if(bNode==NULL){
cout << "No books" << endl;
return;
}
if(bNode->left !=NULL){
displayBookTree(bNode->left);
}
if(bNode->right !=NULL){
displayBookTree(bNode->right);
}
cout <<"Title: " << bNode->title << endl;
cout <<"URL: " << bNode->url <<endl;
}
一方面,delete不會將指針設置爲NULL,並且只檢查null。 – dutt
我試過使用bNode = NULL,但我仍然有數據...只是再次運行它,數據已從刪除函數中的指針中刪除,但在函數外部仍有數據傳入到指針中刪除功能。 hmm – Covertpyro
問題會在'Book'內使用'std :: unique_ptr'離開。所有這些手動內存管理都會使代碼難以閱讀和脆弱。 –
MSalters