Pagini recente »
Istoria paginii utilizator/rarres
|
Rating eduard (EduardGrigoras)
|
Istoria paginii utilizator/aalleexxaa
|
2014-01-28-test-78
|
Cod sursă (job #582157)
Cod sursă (job
#582157)
#include <stdio.h>
#define MAX_N 200000
#define NIL -1
int st[MAX_N], dr[MAX_N], pos[MAX_N];
int numPos = 0;
void collect(int node) {
if (node != NIL) {
collect(st[node]);
pos[numPos++] = node;
collect(dr[node]);
}
}
int main(void) {
int n, root;
// Citire
FILE *f = fopen("pointeri.in", "r");
fscanf(f, "%d %d\n", &n, &root);
for (int i = 0; i < n; i++) {
fscanf(f, "%d", &st[i]);
}
for (int i = 0; i < n; i++) {
fscanf(f, "%d", &dr[i]);
}
fclose(f);
// Colectăm nodurile arborelui în inordine
collect(root);
// Atribuim vectorii st și dr
for (int i = 1; i < n; i++) {
st[pos[i]] = pos[i - 1];
}
st[pos[0]] = NIL;
for (int i = 0; i < n - 1; i++) {
dr[pos[i]] = pos[i + 1];
}
dr[pos[n - 1]] = NIL;
// Scriere
f = fopen("pointeri.out", "w");
fprintf(f, "%d\n", pos[0]);
for (int i = 0; i < n; i++) {
fprintf(f, "%d ", st[i]);
}
fprintf(f, "\n");
for (int i = 0; i < n; i++) {
fprintf(f, "%d ", dr[i]);
}
fprintf(f, "\n");
fclose(f);
}