#include #include #include #include #define MAX 1000 // preorder vypis s odsadenim podla urovne void print_preorder(int *a, int n, int i, int level) { if (i >= n) return; // odsadenie medzerami for (int k = 0; k < level; k++) printf(" "); printf("%d\n", a[i]); // lavy print_preorder(a, n, 2*i + 1, level + 1); // pravy print_preorder(a, n, 2*i + 2, level + 1); } int main() { char input[5000]; int heap[MAX]; int count = 0; // nacitanie riadka if (!fgets(input, sizeof(input), stdin)) { printf("Nie je kopa.\n"); return 0; } // parsovanie cisel zo vstupu char *ptr = input; while (*ptr) { while (*ptr && isspace((unsigned char)*ptr)) ptr++; if (*ptr == '\0') break; char *end; long val = strtol(ptr, &end, 10); if (ptr == end) break; heap[count++] = (int)val; ptr = end; } // overenie minimalnej kopovitosti for (int i = 0; i < count; i++) { int l = 2*i + 1; int r = 2*i + 2; if (l < count && heap[l] < heap[i]) { printf("Nie je kopa.\n"); return 0; } if (r < count && heap[r] < heap[i]) { printf("Nie je kopa.\n"); return 0; } } printf("Je to taka kopa:\n"); print_preorder(heap, count, 0, 0); return 0; }