Загрузка данных


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