gpt4 book ai didi

C++ 删除整个二叉搜索树

转载 作者:行者123 更新时间:2023-11-30 04:11:44 24 4
gpt4 key购买 nike

出于某种原因,我的节点似乎没有被删除。看起来好像它遍历到最后没问题但是在节点被“删除”之后它仍然有数据。我也试过free(bNode)bNode = NULL 而不是 delete bNode 但它们都给出相同的结果。

cout 和 display 函数是在我尝试调试时添加的。我只是不明白为什么它不起作用,我希望我没有遗漏一些简单的东西。

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;
}

最佳答案

“使用 0。“NULL”宏不是类型安全的;如果您觉得必须 使用“null”,使其成为 const int 而不是 C 风格的“#define”。还 有关 Stroustrup 反对的论点,请参见“The C++ Programming Language” “NULL”的用法。”

我会尝试改变:

 if (bNode==NULL) { ... }

 if (!bNode) { ... }

if (bNode->left !=NULL) { ... }
if (bNode->right !=NULL) { ... }

if (bNode->left) { ... }
if (bNode->right) { ... }

然后看看this answer关于如何正确删除一个结构体!

关于C++ 删除整个二叉搜索树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20115610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com