Cerința
Considerăm un arbore binar cu n
noduri în care fiecare nod este numerotat de la 1
la n
și conține o valoare număr natural. Să se afișeze valorile din arbore în urma parcurgerii în preordine (rădăcină, stâng, drept).
Date de intrare
Fișierul de intrare preordine.in
conține pe prima linie numărul n
. Fiecare dintre următoarele n
linii contine câte 3
numere X st dr
; linia i + 1
din fișier conține informatiile despre nodul numerotat cu i
: X
reprezintă valoare din nod, st
reprezintă numărul de ordine al descendentului stâng sau 0
dacă nodul i
nu are descendent stâng, iar dr
reprezintă numărul de ordine al descendentului drept sau 0
dacă nodul i
nu are descendent drept.
Date de ieșire
Fișierul de ieșire preordine.out
va conține pe prima linie n
numere, separate prin exact un spațiu, reprezentând valorile din nodurile arborelui, obținute în urma parcurgerii în preordine.
Restricții și precizări
1 ≤ n ≤ 1000
- valorile din nodurile arborelui vor fi mai mici sau egale cu
1.000.000
Exemplu
preordine.in
6 2 3 5 6 0 6 1 0 0 7 1 2 4 0 0 10 0 0
preordine.out
7 2 1 4 6 10
Explicație
Exemplul corespunde arborelui de mai jos, în care au fost marcate cu albastru valorile din noduri, iar cu roșu numerele de ordine ale nodurilor.
#include <bits/stdc++.h> using namespace std; ifstream cin("preordine.in"); ofstream cout("preordine.out"); int n , St[1001] , Dr[1001] , val[1001] , T[1001]; void RSD(int p) { if(p>0) { cout << val[p] << ' '; RSD(St[p]); RSD(Dr[p]); } } void SRD(int p) { if(p>0) { SRD(St[p]); cout << val[p] << ' '; SRD(Dr[p]); } } void SDR(int p) { if(p>0) { SDR(St[p]); SDR(Dr[p]); cout << val[p] << ' '; } } int main() { cin >> n; for(int i = 1 ; i <= n ; i++) { cin >> val[i] >> St[i] >> Dr[i]; T[St[i]] = i; T[Dr[i]] = i; } int aux = 1 , rez; while(aux > 0) { if(rez != 0) rez = aux; aux = T[aux]; } RSD(rez); }