Parcurgerea arborilor binari

 

Operatiile de parcurgere a arborilor binari se simplifica mult daca vom considera ca fiecare nod al arborelui subordoneaza un subarbore binar stang si un subarbore binar drept. Avand in vedere aceasta observatie se vor defini subprograme recursive care utilizeaza tehnica Divide et Impera.

 

            Principalele modalitati de parcurgere ale unui arbore binar sunt:

 

A)  Arborii binari pot fi parcursi prin metode specifice grafurilor: in adancime, latime.

 

B) Metode specifice arborilor binari :

 

Solutiile de parcurgere ale arborelui din figura urmatoare :

 

Organization Chart

 

 

 

 

 

 

 

 

 

 

parcurgere svd - in inordine

4 2 5 1 6 3 7 8

parcurgere vsd - in preordine

1 2 4 5 3 6 7 8

parcurgere sdv - in postordine

4 5 2 6 8 7 3 1

 

 

Programul urmator genereaza un arbore binar memorat in heap si il parcurge prin cele 3 metode.

 

#include<iostream.h>

#include<conio.h>

struct nod{int nro;

               nod*st,*dr;};

 

nod *r;

 

void svd(nod *c)

   {if(c)

            {svd(c->st);

             cout<<c->nro<<" ";

             svd(c->dr);

            }

   }

 

void vsd(nod *c)

   {if(c)

            {cout<<c->nro<<" ";

             vsd(c->st);

             vsd(c->dr);

            }

   }

 

void sdv(nod *c)

   {if(c)

            {sdv(c->st);

             sdv(c->dr);

             cout<<c->nro<<" ";

            }

   }

 

nod* citire_h()

{int nr;

 nod*c;

 cout<<"nr de ordine ";

 cin>>nr;

 if(nr)

       {c=new nod;

            c->nro=nr;

            c->st=citire_h();

            c->dr=citire_h();

            return c;

            }

 else

     return 0;

}

 

void main()

{clrscr();

 r=citire_h();

cout<<endl<<"parcurgere svd - in inordine "<<endl;

svd(r);

cout<<endl<<"parcurgere vsd - in preordine "<<endl;

vsd(r);

cout<<endl<<"parcurgere sdv - in postordine "<<endl;

sdv(r);

getch();

 

}

 

Probleme propuse:

1. Elevii unei clase stau in banca cate doi sau cate unul singur. Cand este nevoie sa se faca un anunt urgent la sfarsit de saptamana sau in vacanta, ei au stabilit un sistem prin care un elev va anunta pe altii doi care sunt colegi de banca, sau pe unul singur, daca nu are coleg de banca (exista si elevi care nu vor da telefoane mai departe). Stiind ca doamna diriginta face primul anunt (anunta doi elevi care sunt colegi de banca) si apoi fiecare elev isi anunta alti doi colegi de banca (sau unul sau niciunul) de clasa si asa mai departe, se cere sa se scrie un program care realizeaza urmatoarele:

a) memorarea datelor intr-un arbore binar alocat in heap. Un elev inexistent se va marca cu *
b) numara si afiseaza din cati elevi este formata clasa
c)
  afiseaza numele tuturor elevilor din clasa
d) sa se determine daca un elev face parte din clasa
e) sa se afiseze elevii anuntati de diriginta
f) sa se afiseze cologii de banca (perechi)
g) numara cati elevi au acelasi nume cu un nume dat de la tastatura
h) afiseaza numele elevilor care nu mai au de anuntat pe nimeni
i) sa se afiseze colegul de banca al lui Gigel (sau un nume citit de la tastatura)
j) cine ar fi trebuit sa il anunte pe Dan (sau un nume citit de la tastatura)
k) sa se afiseze elevii care stau in stanga in banci
l) elevul x si elevul y isi schimba locurile. Sa se afiseze.
m) cate banci sunt ocupate de un singur elev
n) cate banci sunt ocupate de doi elevi
o) cate banci sunt ocupate

2. Un arbore binar retine numere intregi.
a) sa se afiseze numerele utilizand una dintre metode.
b) sa se afiseze numerele pare din arbore
c) sa se determine cel mai mare numar din arbore
d) sa se determine suma cifrelor tuturor numerelor din arbore
e) afisati frunzele
f) sa se determine daca exista o anumita valoare in arbore
g) sa se determine daca arborele contine numere prime
h) sa se genereze oglinditul arborelui
i) sa se afiseze subordonatii stangi
j) sa se inlocuiasca o cheie cu o alta
k) sa se inverseze doua chei
l) sa se afiseze fratele lui x
m) sa se afiseze tatal lui x
n) sa se afiseze fii (fiul) lui x
o) sa se determine minimul din arbore
p) sa se afiseze nodurile cu un singur subordonat

3. Sa se determine daca doi arbori sunt egali

4. Fie un arbore binar memorat prin vectorii stang si drept. Sa se parcurga arborele prin cele trei metode.

5. Fiind dat un arbore binar memorat in heap, sa se genereze un nou arbore binar identic cu primul.

6. Fie un arbore binar memora in heap. Sa se genereze oglinditul la dreapta al arborelui binar dat.

Organization Chart Organization Chart
 

 

 


fig 1                                                                                       fig 2

 

7. Fie un arbore binar memora in heap. Sa se afiseze cel de al k element din parcurgerea svd. Pt arborele din figura 1 pt k=3 se obtine 2

 

8. Fie un arbore binar memora in heap.

a) Sa se afiseze cate niveluri are arborele

b) Sa se afiseze nodurile de pe nivelul x

c) sa se afiseze nodurile pe niveluri

d) Calculati si afisati suma nodurilor de pe un nivel dat

e) sa se afisese frunzele care nu se gasesc pe ultimul nivel

 

9. Un arbore binar retine caractere.
a) sa se determine cate vocale retine arborele
b) se citeste un sir de caractere de la tastatura. Sa se determine daca sirul citit este egal cu sirul determinat de parcurgerea arborelui (svd, vsd sau sdv).

 

10. Sa se genereze un AB care reprezinta descompuneri in baza 2 ale numerelor <pow(2,k)

 

 

 

 

 

 

 

 

 

 

 

 

 

12. Fie un graf orientat memorat prin matricea de adiacenta. Sa se determine daca graful poate  fi arbore binar. In caz afirmativ , pentru o solutie oarecare, sa se parcurga svd.

 

13. Fie un arbore binar. Sa se completeze arborele astfel incat fiecare nod sa aiba 2 subordonati. Valoarea cu care se face completarea se citeste de la tastatura.