Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Vizitare in postordine, varianta recursiva. Arborele este reprezentat prin vectorii stang, drept, tata si label.
- #include <stdio.h>
- #include <stdlib.h>
- #define NMAX 1000
- int label[NMAX + 1]; // label[k] - eticheta nodului k
- int tata[NMAX + 1]; // tata[k] - parintele nodului k, sau 0 daca k este radacina
- int stang[NMAX + 1]; // stang[k] - descendentul stang al nodului k, sau 0 daca nu exista
- int drept[NMAX + 1]; // drept[k] - descendentul drept al nodului k, sau 0 daca nu exista
- void visit(int node, FILE* f) {
- fprintf(f, "%d ", label[node]);
- }
- void postorder(int k, FILE* fout) {
- if (k > 0) {
- postorder(stang[k], fout);
- postorder(drept[k], fout);
- visit(k, fout);
- }
- }
- int main() {
- FILE *fin, *fout;
- int n, i, rad;
- fin = fopen("postordine.in", "r");
- fout = fopen("postordine.out", "w");
- fscanf(fin, "%d", &n);
- for (i = 1; i <= n; i++) {
- fscanf(fin, "%d %d %d", &label[i], &stang[i], &drept[i]);
- // pastram tatal fiecarui nod din arbore
- if (stang[i] != 0) {
- tata[stang[i]] = i;
- }
- if (drept[i] != 0) {
- tata[drept[i]] = i;
- }
- }
- // determinam radacina arborelui
- for (i = 1, rad = 0; (i <= n) && (rad == 0); i++) {
- if (tata[i] == 0) {
- rad = i;
- }
- }
- postorder(rad, fout);
- fclose(fin);
- fclose(fout);
- return 0;
- }
- 6
- 2 3 5
- 6 0 6
- 1 0 0
- 7 1 2
- 4 0 0
- 10 0 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement