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