我正在研究二叉搜索树 (BST) 程序。根据作业的要求,用户加载一个文本文件来构建树。如果用户愿意,他们可以通过加载新的文本文件来创建新树。加载新的文本文件应该会破坏旧树。
为了适应这个要求,我创建一棵新树的方法readNewFile()
,首先检查一棵树是否已经存在。如果是这样,它将在树上运行析构函数。但是,然后我需要创建一个存在于 范围之外的新树,readNewFile()
以便可以全局访问它。这可能吗?如果是这样,你能解释一下如何吗?
我的简化代码:
int main() {
//BST
BST rootTree;
readNewFile(rootTree);
readNewFile(rootTree);
return 0;
}
void readNewFile(BST& tree) {
ifstream inFile;
string fileName;
// if tree was previously filled, destroy it
if (tree.rootPtr() != NULL) {
tree.~BST();
BST tree = new BST();
}
cout << "\nEnter file to load: ";
cin.ignore();
getline(cin, fileName);
cout << "Opening file " << fileName << endl;
inFile.open(fileName.c_str(), ios::in);
// Populates tree... //
}
析构函数(在 BST.hpp 中):
BST::~BST() {
destroyTree(root);
}
void BST::destroyTree(TreeNode*& treePtr) {
if (treePtr != NULL) {
destroyTree(treePtr->leftChildPtr);
destroyTree(treePtr->rightChildPtr);
delete treePtr;
}
}
这会返回一个段错误,这是有道理的,因为树被破坏了。但是,有没有办法可以创建一个与被破坏的范围相同的新树BST rootTree
?