Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <iostream>
- #define EMPTY -1
- using namespace std;
- struct Node //struktura - vrchol
- {
- int key;
- struct Node* left, *right;
- };
- Node* newNode(int key) //pomocná funkce - vytvoří nový vrchol (alokuje mu paměť)
- {
- Node* temp = new Node;
- temp->key = key;
- temp->left = temp->right = NULL;
- return (temp);
- }
- void serializace(Node *root, FILE *data) //serializace - uložení struktury stromu do souboru
- {
- if (root == NULL)
- {
- fprintf(data, "%d ", EMPTY);
- return;
- }
- fprintf(data, "%d ", root->key);
- serializace(root->left, data);
- serializace(root->right, data);
- }
- void deserializace(Node *&root, FILE *data) //deserializace - ze souboru (kde je ta struktura toho stromu), vytvoří strom
- {
- int value;
- if ( !fscanf(data, "%d ", &value) || value == EMPTY)
- return;
- root = newNode(value);
- deserializace(root->left, data);
- deserializace(root->right, data);
- }
- void inorder(Node *root) //moje metoda, oveřuje že se deserializace povedla - vnitřní průchod stromem (seřazení klíčů od nejmenšího),
- {
- if (root)
- {
- inorder(root->left);
- cout << root->key << endl;
- inorder(root->right);
- }
- }
- int main()
- {
- struct Node *root = newNode(17); //vytvoření stromu (potom budu muset náhodně generovat) - teď neřeším
- root->left = newNode(7);
- root->right = newNode(39);
- root->left->left = newNode(3);
- root->left->right = newNode(11);
- root->left->right->left = newNode(10);
- FILE *data = fopen("tree.txt", "w");
- if (data == NULL)
- {
- cout << "Nelze otevrit soubor" << endl;
- return 0;
- }
- serializace(root, data);
- fclose(data);
- Node *root1 = NULL;
- data = fopen("tree.txt", "r");
- deserializace(root1, data);
- cout << "Pruchod stromem (od nejmensiho - overeni stromu): " << endl;
- inorder(root1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement