#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,r); 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){ char buffer[SIZE]; memset(buffer, 0, SIZE); for (int i = 0; i < offset && tree->value[0] != '*'; i++){ printf(" "); } printf("%s",tree->value); if(tree->value[0] == '*'){ printf("Koniec\n"); exit(0); } char r = getchar(); if (r == 'a') { print_tree(tree->left, offset + 3); } else if (r == 'n') { print_tree(tree->right, offset + 3); } else { printf("CHYBOVY VSTUP!\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; }