Update a4/program.c
This commit is contained in:
parent
3ee61b073b
commit
a72734817f
53
a4/program.c
53
a4/program.c
@ -0,0 +1,53 @@
|
|||||||
|
#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;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user