From 03a427d1f965ee1acd7545c96378ef2415d558de Mon Sep 17 00:00:00 2001 From: Viktor Daniv Date: Sun, 24 Nov 2024 17:41:20 +0000 Subject: [PATCH] Add a4/program.c --- a4/program.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 a4/program.c diff --git a/a4/program.c b/a4/program.c new file mode 100644 index 0000000..1e65081 --- /dev/null +++ b/a4/program.c @@ -0,0 +1,68 @@ +#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)) { + printf("Chyba pri načítaní vstupu.\n"); + return 1; + } + + // Parsovanie vstupu + char *token = strtok(input, " "); + while (token) { + arr[n++] = atoi(token); + token = strtok(NULL, " "); + } + + // 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; +} \ No newline at end of file