next up previous contents
Next: Problema propusa Up: Problema rezolvata Previous: Sursa programului   Cuprins


Comentarea programului

Programul este compus din trei fisiere:

Primul fisier, arbore.h contine definitia de tip pentru un nod al arborelui, precum si declaratiile functiilor ce apartin tipului abstract arbore binar ordonat.

Al doilea fisier, arbore.c contine definitia tipului abstract arbore binar ordonat.

Functia prezent cauta nodul din arborele indicat de parametrul t, care are câmpul id egal cu sirul indicat de parametrul id. prezent returneaza pointerul catre nodul în care s-a gasit identificatorul sau NULL daca acest nod nu exista.

tipareste parcurge arborele în inordine si afiseaza continutul lui. tipareste afiseaza întâi subarborele stâng (apelându-se recursiv pentru fiul stâng al nodului curent), apoi nodul curent si în final subarborele drept (apelându-se recursiv pentru fiul drept al nodului curent).

elimina sterge din arborele cu radacina p nodul al carui câmp id este egal cu parametrul id. elimina returneaza radacina arborelui modificat. Daca p este NULL înseamna ca nu exista nodul cautat în arbore si se afiseaza un mesaj de eroare. Daca nodul curent are câmpul id mai mic decât parametrul id, atunci cautarea nodului continua în subarborele drept. Din acest motiv, elimina este apelata recursiv pentru fiul drept al nodului curent. În mod asemanator, daca câmpul id al nodului curent este mai mare ca si parametrul id, atunci elimina este apelata pentru fiul stâng. Când nodul ce trebuie eliminat a fost gasit, distingem trei situatii. În prima, nodul nu are fiu stâng. Se elibereaza memoria ocupata de nod si returnam fiul sau drept. Situatia a doua este când nodul nu are fiu drept si atunci returnam fiul sau stâng. Al treilea caz este când nodul are ambii fii si atunci cautam pe cel mai mare nod care este mai mic ca cel care trebuie sters. El va fi mutat în locul celui care trebuie eliminat si apoi îl stergem din vechea pozitie. Întotdeauna, acest nod nu are fiu drept (daca ar avea, acesta ar fi mai mare ca el), iar eliminarea lui se face ca pentru un nod doar cu fiu stâng. Pentru a gasi nodul precizat, vom parcurge în subarborele stâng înlantuirile pentru fiul drept. Rutina supred realizeaza acest lucru.

adauga introduce un nod nou în arborele indicat de parametrul t. Nodul are câmpul id egal cu parametrul id si câmpul valoare egal cu v. Rutina returneaza radacina arborelui modificat.

Toate aceste functii au ca si parametru formal radacina arborelui prelucrat, radacina care nu este vizibila în exteriorul fisierului în care a fost definita (din cauza clasei de memorare static). Folosind aceste functii se definesc cauta, sterge, listare si introdu, operatorii prin care tipul abstract arbore ordonat este prelucrat.

Al treilea fisier, main.c contine functia main, functia pentru citirea comenzilor, rutina de afisare si prelucrare a meniului si rutinele auxiliare pentru implementarea comenzilor.


next up previous contents
Next: Problema propusa Up: Problema rezolvata Previous: Sursa programului   Cuprins
Cristian Gavrila 2001-10-02