由于某种原因,我的节点似乎并未被删除。它看起来好像遍历到了最后,但是在节点被“删除”之后,它仍然有数据在其中。我也试过 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