diff --git a/a4/program.c b/a4/program.c index e69de29..c46d68f 100644 --- a/a4/program.c +++ b/a4/program.c @@ -0,0 +1,53 @@ +#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("Введіть числа, розділені пробілами (закінчіть Enter): "); + 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("Є така купа:\n"); + print_preorder(arr, n, 0, 0); // Вивід дерева у форматі preorder + } else { + printf("Не є копою.\n"); + } + + return 0; +}