#include #include #include #include // Funkcia na overenie, či pole spĺňa podmienku binárnej minimálnej kopovitosti bool is_min_heap(int arr[], int n) { for (int i = 0; i < n; i++) { int left = i * 2 + 1; int right = i * 2 + 2; // Kontrola ľavého syna if (left < n && arr[left] < arr[i]) { return false; } // Kontrola pravého syna if (right < n && arr[right] < arr[i]) { return false; } } return true; } // Rekurzívna funkcia na výpis binárneho stromu v "preorder" poradí void print_preorder(int arr[], int n, int index, int level) { if (index >= n) return; // Výpis aktuálneho uzla s medzerami podľa úrovne for (int i = 0; i < level; i++) { printf(" "); } printf("%d\n", arr[index]); // Rekurzívne volania pre ľavého a pravého syna print_preorder(arr, n, index * 2 + 1, level + 1); // Ľavý syn print_preorder(arr, n, index * 2 + 2, level + 1); // Pravý syn } int main() { char input[256]; int arr[100]; int n = 0; // Načítanie vstupu // printf("Zadajte čísla oddelené medzerou: "); if (fgets(input, sizeof(input), stdin) == NULL) { printf("Chyba pri načítaní vstupu.\n"); return 1; } // Odstránenie znaku nového riadku, ak existuje input[strcspn(input, "\n")] = '\0'; // Parsovanie vstupu char *ptr = strtok(input, " "); while (ptr != NULL) { arr[n++] = atoi(ptr); ptr = strtok(NULL, " "); } // Ak je na vstupe len jedno číslo if (n == 1) { printf("Je to taka kopa:\n"); printf("%d\n", arr[0]); return 0; } // Overenie, či je to binárna kopa if (is_min_heap(arr, n)) { printf("Je to taka kopa:\n"); print_preorder(arr, n, 0, 0); // Výpis v "preorder" poradí } else { printf("Nie je kopa.\n"); } return 0; }