#include #include #include #define SIZE 100 struct tree { char* value; struct tree* left; struct tree* right; }; struct tree* read_tree(int* counter) { char buffer[SIZE]; memset(buffer, 0, SIZE); char* r = fgets(buffer, SIZE, stdin); if(r == NULL){ printf("Expert z bufetu to vie.\n"); printf("Chybna databaza\n"); return NULL; } if (buffer[0] == '\n') { return NULL; } struct tree* tree = calloc(1, sizeof(struct tree)); tree->value = malloc(strlen(buffer) + 1); strcpy(tree->value, buffer); if (buffer[0] == '*') { (*counter)++; return tree; } tree->left = read_tree(counter); tree->right = read_tree(counter); return tree; } void destroy_tree(struct tree* tree) { if (tree == NULL) return; destroy_tree(tree->left); destroy_tree(tree->right); free(tree->value); free(tree); } void print_tree(struct tree* tree) { if (tree == NULL) return; printf("%s", tree->value); if (tree->value[0] == '*') { printf("Koniec\n"); return; } getchar(); char r = getchar(); if (r == 'a') { print_tree(tree->left); } else if (r == 'n') { print_tree(tree->right); } else if (r == EOF) { printf("Koniec vstupu\n"); } else { printf("Nerozumiem\n"); exit(0); } } int main() { int counter = 0; struct tree* root = read_tree(&counter); if(root != 0){ printf("Expert z bufetu to vie.\n"); printf("Pozna %d druhov ovocia a zeleniny.\n", counter); printf("Odpovedajte 'a' pre prvu moznost alebo 'n' pre druhu moznost.\n"); print_tree(root); } destroy_tree(root); return 0; }