#include <iostream>
#include <fstream>
#include <string>
struct Node {
int key;
Node* left;
Node* right;
Node(int v) : key(v), left(nullptr), right(nullptr) {}
};
/// ---------------- СОХРАНЕНИЕ ----------------
void saveTree(Node* root, std::ofstream& out) {
if (!root) {
out << "# ";
return;
}
out << root->key << " ";
saveTree(root->left, out);
saveTree(root->right, out);
}
/// ---------------- ВОССТАНОВЛЕНИЕ ----------------
Node* loadTree(std::ifstream& in) {
std::string x;
if (!(in >> x)) return nullptr;
if (x == "#") return nullptr;
Node* node = new Node(std::stoi(x));
node->left = loadTree(in);
node->right = loadTree(in);
return node;
}
/// ---------------- ПРОВЕРКА ----------------
void printPreorder(Node* root) {
if (!root) {
std::cout << "# ";
return;
}
std::cout << root->key << " ";
printPreorder(root->left);
printPreorder(root->right);
}
void deleteTree(Node* root) {
if (!root) return;
deleteTree(root->left);
deleteTree(root->right);
delete root;
}
int main() {
Node* root;
// Загрузка из файла
std::ifstream in("tree.txt");
root = loadTree(in);
in.close();
// Проверка
printPreorder(root);
std::cout << "\n";
// Сохранение обратно
std::ofstream out("tree_copy.txt");
saveTree(root, out);
out.close();
deleteTree(root);
}