#include #include #include // Додаємо цю бібліотеку для strtok #include bool is_min_heap(int *arr, int n) { // Перевіряємо мінімальну коповість for (int i = 0; i < n; i++) { int l = 2 * i + 1; // Лівий син int r = 2 * i + 2; // Правий син if (l < n && arr[i] > arr[l]) return false; // Перевірка лівого сина if (r < n && arr[i] > arr[r]) return false; // Перевірка правого сина } return true; } void print_preorder(int *arr, int n, int i, int level) { // Якщо вузол виходить за межі масиву, повертаємося if (i >= n) return; // Вивід вузла з відступами залежно від рівня for (int j = 0; j < level; j++) printf(" "); printf("%d\n", arr[i]); // Рекурсивно обходимо лівого і правого синів print_preorder(arr, n, 2 * i + 1, level + 1); // Лівий син print_preorder(arr, n, 2 * i + 2, level + 1); // Правий син } int main() { // Зчитування чисел із вводу //printf("Je to taka kopa: "); char input[1024]; fgets(input, sizeof(input), stdin); // Перетворення рядка на масив чисел int arr[100], n = 0; char *token = strtok(input, " "); while (token != NULL) { arr[n++] = atoi(token); // Конвертуємо в ціле число і додаємо до масиву token = strtok(NULL, " "); } // Перевірка, чи є масив мінімальною купою if (is_min_heap(arr, n)) { printf("Je to taka kopa:\n"); print_preorder(arr, n, 0, 0); // Вивід дерева у форматі preorder } else { printf("Nie je kopa.\n"); } return 0; }