#include #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 (buffer[0] == '\n') { return NULL; } assert(r); struct tree* tree = calloc(1, sizeof(struct tree)); tree->value = malloc(strlen(buffer) + 1); strcpy(tree->value, buffer); assert(tree->value); 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, int offset) { if (tree == NULL) return; for (int i = 0; i < offset && tree->value[0] != '*'; i++) { printf(" "); } printf("%s", tree->value); if (tree->value[0] == '*') { printf("Koniec\n"); return; } getchar(); char r = getchar(); if (r == 'a') { print_tree(tree->left, offset + 3); } else if (r == 'n') { print_tree(tree->right, offset + 3); } else if (r == EOF) { printf("Koniec vstupu\n"); } else { printf("Nerozumiem\n"); exit(0); } } int main() { int counter = 0; int offset = 0; struct tree* root = read_tree(&counter); 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, offset); destroy_tree(root); return 0; }