68 lines
1.4 KiB
C
68 lines
1.4 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <ctype.h>
|
|
#include <string.h>
|
|
|
|
#define MAX 1000
|
|
|
|
// preorder vypis s odsadenim podla urovne
|
|
void print_preorder(int *a, int n, int i, int level) {
|
|
if (i >= n) return;
|
|
|
|
// odsadenie medzerami
|
|
for (int k = 0; k < level; k++) printf(" ");
|
|
|
|
printf("%d\n", a[i]);
|
|
|
|
// lavy
|
|
print_preorder(a, n, 2*i + 1, level + 1);
|
|
// pravy
|
|
print_preorder(a, n, 2*i + 2, level + 1);
|
|
}
|
|
|
|
int main() {
|
|
char input[5000];
|
|
int heap[MAX];
|
|
int count = 0;
|
|
|
|
// nacitanie riadka
|
|
if (!fgets(input, sizeof(input), stdin)) {
|
|
printf("Nie je kopa.\n");
|
|
return 0;
|
|
}
|
|
|
|
// parsovanie cisel zo vstupu
|
|
char *ptr = input;
|
|
while (*ptr) {
|
|
while (*ptr && isspace((unsigned char)*ptr)) ptr++;
|
|
if (*ptr == '\0') break;
|
|
|
|
char *end;
|
|
long val = strtol(ptr, &end, 10);
|
|
if (ptr == end) break;
|
|
|
|
heap[count++] = (int)val;
|
|
ptr = end;
|
|
}
|
|
|
|
// overenie minimalnej kopovitosti
|
|
for (int i = 0; i < count; i++) {
|
|
int l = 2*i + 1;
|
|
int r = 2*i + 2;
|
|
|
|
if (l < count && heap[l] < heap[i]) {
|
|
printf("Nie je kopa.\n");
|
|
return 0;
|
|
}
|
|
if (r < count && heap[r] < heap[i]) {
|
|
printf("Nie je kopa.\n");
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
printf("Je to taka kopa:\n");
|
|
print_preorder(heap, count, 0, 0);
|
|
|
|
return 0;
|
|
}
|