Cod sursă (job #582157)

Utilizator avatar Vlad_Anica Anica-Popa Vlad-Ioan Vlad_Anica IP ascuns
Problemă Pointeri Compilator cpp-32 | 1,07 kb
Rundă Arhiva de probleme Status evaluat
Dată 17 feb. 2021 13:01:33 Scor 50
#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);
}