C problem How to write my Binary Search Tree into an output
C++ problem
How to write my Binary Search Tree into an output file. I have a completed BST.h file and main file reading a txt file into a BST and now I
want to write it into and output file. My professor said this:
A Word About Printing
Note that you will need to alter the signatures of preOrderPrint, inOrderPrint and postOrderPrint to take in information about a file.
Part of my BST.h file:
private:
struct Node {
bstitem data;
Node* left;
Node* right;
Node(bstitem newdata) :
data(newdata), left(NULL), right(NULL) {
}
};
typedef struct Node* NodePtr;
NodePtr root;
...
...
void inOrderPrintHelper(NodePtr root);
void preOrderPrintHelper(NodePtr root);
void postOrderPrintHelper(NodePtr root);
public:
......
void inOrderPrint();
void preOrderPrint();
void postOrderPrint();
My main file:
int main() {
int value;
char c;
ifstream fin;
fin.open(\"infile.txt\");
if (fin.fail()) {
cout << \"Input failed.\ \";
exit(-1);
}
ofstream fout;
fout.open(\"outfile.txt\");
if (fout.fail()) {
cout << \"Output file failed to open.\ \";
exit(-1);
}
while (!fin.eof()) {
.......
BST.preOrderPrint();
BST.inOrderPrint();
.........
.........
BST.postOrderPrint();
..........
}
\".....\" are some codes in between not important. I just want to know what I need to change to instead of printing onto the console now I\'m writing
it onto a file.
Here is what I\'m doing but it\'s still incorrect: Example of just 1 inOrderPrint
private:
void inOrderPrintHelper(NodePtr root, ofstream &S);
public:
void inOrderPrint(ofstream &S);
template<class bstitem>
void BinarySearchTree<bstitem>::inOrderPrintHelper(NodePtr root, ofstream &S) {
if (root != NULL) {
inOrderPrintHelper(root->left, &S); <--- error here
S << root->data << \" \";
inOrderPrintHelper(root->right, &S); <--- error here
}
}
template<class bstitem>
void BinarySearchTree<bstitem>::inOrderPrint(ofstream &S) {
inOrderPrintHelper(root, &S); <--- error here
S << endl;
}
Solution
Use this method to BSt to output file.
void writeBinaryTree(BinaryTree *bhbh, ostream &out) {
if (!bhbh) {
out << \"# \";
} else {
out << bhbh->data << \" \";
writeBinaryTree(bhbh->left, out);
writeBinaryTree(bhbh->right, out);
}
}

