Sunteți pe pagina 1din 6

Arbori Binari

1
•Reamintim

• Considerăm un graf neorientat G = (V, E)

•Definitia 1 - Un lanț L = [v0, v1, . . . , vm] este o succesiune de vârfuri cu proprietatea că


• oricare două vârfuri vecine sunt adiacente ([vi, vi+1] ∈ E, ∀i = 0, m − 1).

• -Vârfurile v0 și vm se numesc extremităţile lanțului, iar m reprezintă lungimea lanțului.

•Definitia 2 - Un lanț L ce contine fiecare muchie a unui graf G o singura data se numeste lanț Euler / lanț eulerian.

- Daca extremitatile lanțului sunt identice si lanțul este eulerian atunci ciclul se numeste ciclu eulerian.

• - Un graf ce contine un ciclu eulerian se numeste graf eulerian.

• O problemă mai cunoscută legată de noțiunile de ciclu si lanț eulerian este aceea de a desena cu o singură linie
neîntreruptă o anumită figură geometrică.

•Teorema (Euler) Un graf G conex (|V | ≥ 3) este eulerian dacă si numai dacă gradul fiecarui vârf este par.

2
•Reamintim

• Considerăm un graf neorientat G = (V, E)

•Definitia 1 Se numește arbore liber (”free tree”) un graf simplu G = (V, E) neorientat, conex și aciclic.

•Definitia 2 Dacă se alege un vârf sau nod drept rădăcina arborelui, atunci un arbore liber devine
• arbore cu rădăcină.
• Definitia 3 Un vârf terminal (frunz ̆aeste un vˆarf f ̆ar ̆a descendent ̧i. Vˆarfurile care
•nu sunt terminale sunt neterminale (sau noduri interioare). De obicei, se consider ̆a c ̆a
•exist ̆a o ordonare a descendent ̧ilor aceluia ̧si p ̆arinte.

• - Un graf ce contine un ciclu eulerian se numeste graf eulerian.

• O problemă mai cunoscută legată de noțiunile de ciclu si lanț eulerian este aceea de a desena cu o singură linie
neîntreruptă o anumită figură geometrică.

•Teorema (Euler) Un graf G conex (|V | ≥ 3) este eulerian dacă si numai dacă gradul fiecarui vârf este par.

3
Algoritmul lui Rosenstiehl

Algoritmul construiește un lanţ L, care la final va deveni un ciclu eulerian, folosind pentru aceasta o stivă drept
structură de date auxiliară:

- Se pornește de la un nod oarecare u.


- Se înaintează atâta timp cât este posibil astfel :

• pentru nodul curent u se caută o muchie incidentă cu el, și care să nu mai fi fost parcursă la unul
din
pașii anterior.

• dacă există o astfel de muchie (e = [u, v]), atunci se salvează pe stivă nodul u, iar nodul v devine
nodul current

• în momentul în care nodul curent u nu mai are muchii nevizitate, se adaugă u lanțului L, și se
extrage din stivă nodul anterior (din care s-a ajuns în u)

Vectorul vizit are drept scop să păstreze situația muchiilor:


vizit (e) = 1 , dacă e ∈ E a fost parcursă
0 , dacăe ∈ E nu a fost încă parcursă. 4
•Algoritm lui Rosenstiehl de determinare a unui ciclu eulerian într–un graf conex

• 1: function Rosenstiehl(u, G)
• 2: for e ∈ E do
• 3: vizit e ← 0
• 4: end for
• 5: S⇐u ⊲ Se inserează în stivă nodul u
• 6: while (S ≠ ∅) do
• 7: S⇒u ⊲ Se extrage din stivă nodul curent
• 8: while (∃e = [u, v] ∈ E) ∧ (vizit e = 0)) do
• 9: vizit e ← 1 ⊲ Se marchează muchia e ca fiind utilizată
• 10: S⇐u ⊲ Se salvează în stivă nodul curent u
• 11: u←v ⊲ Nodul current(u) devine nodul v
• 12: end while
• 13: L⇐u ⊲ Se adaugă la lista L nodul curent
• 14: end while
• 15: return L
• 16: end function

•Input: u = nodul de start


• G = graful neorientat conex

•Output: L = lista nodurilor ciclului eulerian 5


Ex:

2
3

5
6
4

Un ciclu eulerian: 1 3 6 5 4 2 5 3 2 1
Lungimea ciclului: 9
6

S-ar putea să vă placă și