二分探索木 (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
ますか?