usaa24/a4/program.c

54 lines
2.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <stdio.h>
#include <stdlib.h>
#include <string.h> // Додаємо цю бібліотеку для strtok
#include <stdbool.h>
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;
}