Biblioteca
Tutora
BibliotecaInformatică și TIC › clasa a XII-a

Arbori

Studiul arborilor ca structuri ierarhice de date și al operațiilor specifice acestora.

Bacalaureat

Arborele — definiții și proprietăți fundamentale

Un arbore este un graf neorientat conex și fără cicluri. Definițiile echivalente sunt teren de grilă — un graf cu n vârfuri este arbore dacă îndeplinește oricare două dintre proprietățile: este conex, nu are cicluri, are exact n-1 muchii. Oricare două le implică pe a treia.

Alte caracterizări echivalente care se cer: între oricare două vârfuri există exact un lanț elementar; graful este conex minimal (eliminarea oricărei muchii îl deconectează) și fără cicluri maximal (adăugarea oricărei muchii creează exact un ciclu).

Un arbore cu rădăcină este un arbore în care un vârf este desemnat rădăcină; astfel apare o ierarhie cu vocabular propriu:

O pădure este o mulțime de arbori — un graf fără cicluri, nu neapărat conex; o pădure cu n vârfuri și k componente are n-k muchii.

Greșeala clasică: a crede că orice graf cu n-1 muchii e arbore. Fals — n-1 muchii pot forma un ciclu plus vârfuri izolate; e nevoie și de conexitate (sau de absența ciclurilor).

Arbori binari — structură și reprezentare

Un arbore binar este un arbore cu rădăcină în care fiecare nod are cel mult doi fii, iar fii sunt etichetați: subarbore stâng și subarbore drept. Distincția stânga/dreapta contează: doi arbori cu aceleași noduri dar cu un fiu mutat din stânga în dreapta sunt arbori binari diferiți.

Tipuri speciale care apar la teorie:

Proprietate de calcul frecventă: un arbore binar cu n noduri are înălțimea cel puțin log2(n) (rotunjit în jos) — cazul echilibrat — și cel mult n-1 — cazul degenerat, când arborele devine practic o listă înlănțuită.

Reprezentări în memorie:

Parcurgerile arborelui binar

Cele trei parcurgeri în adâncime ale unui arbore binar diferă prin momentul vizitării rădăcinii — R = rădăcină, S = subarbore stâng, D = subarbore drept:

Toate trei se scriu natural recursiv: funcția se autoapelează pe fiul stâng și pe fiul drept, iar poziția instrucțiunii de afișare între cele două apeluri decide tipul parcurgerii. Trucuri de verificare rapidă la grile: în preordine primul element afișat este rădăcina; în postordine ultimul element este rădăcina; în inordine, la un arbore binar de căutare, elementele apar sortate crescător.

Există și parcurgerea pe niveluri (în lățime): se vizitează nodurile nivel cu nivel, de la stânga la dreapta, folosind o coadă — analogul BFS din grafuri.

Problemă tipică de subiect: reconstituirea arborelui din două parcurgeri. Din preordine + inordine (sau postordine + inordine) arborele se reconstruiește unic: primul element din preordine este rădăcina, care împarte inordinea în subarborele stâng și cel drept, apoi se repetă recursiv. Din preordine + postordine, în general, arborele nu este unic determinat — capcană de teorie.

Greșeala frecventă de execuție: la parcurgerea manuală, elevii vizitează rădăcina și fiii direct, uitând că întreg subarborele stâng se epuizează înainte de a trece mai departe. Parcurgerea se face pe subarbori, nu pe noduri individuale.

Arbori binari de căutare

Un arbore binar de căutare (ABC) este un arbore binar în care, pentru fiecare nod: toate valorile din subarborele stâng sunt mai mici decât valoarea nodului, iar toate valorile din subarborele drept sunt mai mari. Condiția se aplică întregilor subarbori, nu doar fiilor direcți — un nod din subarborele stâng aflat la două niveluri distanță tot trebuie să fie mai mic decât strămoșul; verificarea doar a relației tată-fiu este eroarea clasică de validare.

Consecința fundamentală: parcurgerea în inordine a unui ABC produce valorile în ordine crescătoare. Aceasta este și metoda standard de a verifica dacă un arbore binar este ABC.

Căutarea unei valori pornește din rădăcină: dacă valoarea căutată e mai mică, se coboară în stânga; dacă e mai mare, în dreapta; dacă e egală, s-a găsit. Pe un arbore echilibrat, drumul are lungimea O(log n) — la fiecare pas se elimină jumătate din noduri, exact ca la căutarea binară în vector sortat.

Inserarea urmează același drum și adaugă noul nod ca frunză, în poziția unde căutarea a eșuat.

Cazul degenerat, cerut la teorie: dacă valorile se inserează în ordine crescătoare (sau descrescătoare), arborele devine un lanț cu înălțimea n-1, iar căutarea degradează la O(n) — avantajul față de lista liniară dispare complet. Forma ABC-ului depinde deci de ordinea inserării, nu doar de mulțimea valorilor.

La ștergere, cazul interesant este nodul cu doi fii: valoarea lui se înlocuiește cu cea mai mare valoare din subarborele stâng (predecesorul în inordine) sau cu cea mai mică din subarborele drept (succesorul), apoi se șterge acel nod, care are cel mult un fiu.

Heap-ul și arborii oarecare

Heap-ul (max-heap) este un arbore binar aproape complet în care fiecare nod are valoarea mai mare sau egală decât valorile fiilor săi — proprietatea de heap. Consecință imediată: maximul se află în rădăcină. În min-heap relația e inversă și rădăcina ține minimul.

Atenție la confuzia cu ABC: heap-ul ordonează doar pe verticală (tată față de fii); între fiul stâng și fiul drept nu există nicio relație de ordine, iar parcurgerea în inordine a unui heap NU produce un șir sortat.

Fiind aproape complet, heap-ul se memorează într-un vector: fiii nodului i sunt 2i și 2i+1 (numerotare de la 1). Operațiile de bază, ambele O(log n):

Heap-ul este implementarea standard a cozii de priorități și stă la baza sortării HeapSort, cu complexitate O(n log n) garantată.

Arborii oarecare (fiecare nod poate avea oricâți fii) se reprezintă cel mai des prin vectorul de tați: t[i] = tatăl nodului i, iar pentru rădăcină t[i] = 0. Prelucrări cerute la examen: rădăcina este nodul cu t[i] = 0; frunzele sunt nodurile care nu apar ca valoare în vector; numărul fiilor nodului k este numărul aparițiilor lui k în vector; drumul de la un nod la rădăcină se obține urcând din tată în tată. O alternativă de reprezentare este transformarea în arbore binar prin convenția fiu stâng — primul fiu, fiu drept — următorul frate.

De reținut

arbore
graf neorientat conex și fără cicluri; cu n vârfuri are exact n-1 muchii, iar între oricare două vârfuri există un lanț elementar unic
arbore binar
arbore cu rădăcină în care fiecare nod are cel mult doi fii, distingându-se subarborele stâng de subarborele drept
frunză (nod terminal)
nod al unui arbore cu rădăcină care nu are niciun fiu; în vectorul de tați, nod care nu apare ca valoare în vector
parcurgere în preordine (RSD)
parcurgere a arborelui binar în care se vizitează întâi rădăcina, apoi subarborele stâng, apoi subarborele drept; primul nod afișat este rădăcina
parcurgere în inordine (SRD)
parcurgere a arborelui binar în ordinea: subarbore stâng, rădăcină, subarbore drept; aplicată unui arbore binar de căutare, produce valorile sortate crescător
parcurgere în postordine (SDR)
parcurgere a arborelui binar în ordinea: subarbore stâng, subarbore drept, rădăcină; ultimul nod afișat este rădăcina
arbore binar de căutare
arbore binar în care, pentru fiecare nod, toate valorile din subarborele stâng sunt mai mici, iar toate valorile din subarborele drept sunt mai mari decât valoarea nodului
heap (max-heap)
arbore binar aproape complet în care valoarea fiecărui nod este mai mare sau egală decât valorile fiilor; maximul se află în rădăcină, iar inserarea și extragerea au complexitate O(log n)
vector de tați
reprezentare a unui arbore cu rădăcină în care t[i] este tatăl nodului i, iar pentru rădăcină t[i] = 0
arbore binar aproape complet
arbore binar cu toate nivelurile pline, cu excepția eventual a ultimului, completat de la stânga la dreapta; se memorează eficient în vector, cu fiii nodului i pe pozițiile 2i și 2i+1

Greșeli frecvente

Greșit: Se afirmă că orice graf cu n vârfuri și n-1 muchii este arbore
Corect: n-1 muchii nu ajung: graful trebuie să fie și conex (sau, echivalent, fără cicluri); altfel muchiile pot forma un ciclu, lăsând vârfuri izolate
Greșit: La verificarea unui arbore binar de căutare se compară fiecare nod doar cu fiii lui direcți
Corect: Condiția privește întregii subarbori: toate valorile din subarborele stâng trebuie să fie mai mici decât nodul, toate din cel drept mai mari; verificarea sigură este ca parcurgerea în inordine să dea un șir strict crescător
Greșit: Se presupune că parcurgerea în inordine a unui heap produce elementele sortate
Corect: Heap-ul impune ordine doar între tată și fii, nu între subarborele stâng și cel drept; doar la arborele binar de căutare inordinea dă șirul sortat
Greșit: În vectorul de tați se caută frunzele ca noduri cu t[i] = 0
Corect: t[i] = 0 marchează rădăcina; frunzele sunt nodurile care nu apar ca valoare nicăieri în vector, adică nu sunt tată pentru nimeni
Greșit: Se consideră că un arbore binar de căutare garantează căutarea în O(log n) indiferent de date
Corect: Dacă valorile se inserează în ordine crescătoare sau descrescătoare, arborele degenerează într-un lanț de înălțime n-1, iar căutarea devine O(n); doar arborele echilibrat garantează O(log n)

Test — 6 întrebări ca la examen

1. Un arbore cu 25 de vârfuri are:
  1. 25 de muchii
  2. 24 de muchii
  3. 26 de muchii
  4. un număr de muchii care depinde de forma arborelui
Vezi răspunsul
24 de muchii. Orice arbore cu n vârfuri are exact n-1 muchii, deci 24 — proprietatea nu depinde de formă. Ultima variantă tentează pentru că înălțimea și structura variază, dar numărul de muchii este invariant.
2. În parcurgerea în postordine a unui arbore binar, rădăcina arborelui este vizitată:
  1. prima
  2. după subarborele stâng și înaintea celui drept
  3. ultima
  4. imediat după fiul stâng
Vezi răspunsul
ultima. Postordine înseamnă stâng, drept, rădăcină — deci rădăcina apare ultima în șirul vizitat. Varianta a doua descrie inordinea, confuzia cea mai frecventă între cele trei parcurgeri.
3. Parcurgerea în inordine a unui arbore binar de căutare cu valori distincte produce întotdeauna:
  1. valorile în ordinea inserării lor
  2. valorile în ordine crescătoare
  3. valorile în ordine descrescătoare
  4. rădăcina pe prima poziție
Vezi răspunsul
valorile în ordine crescătoare. În inordine se epuizează întâi subarborele stâng (valori mai mici), apoi nodul, apoi subarborele drept (valori mai mari) — rezultatul este șirul sortat crescător, indiferent de ordinea inserării. Ordinea inserării influențează forma arborelui, nu rezultatul inordinii; rădăcina pe prima poziție apare la preordine.
4. Un arbore binar aproape complet este memorat într-un vector, cu rădăcina pe poziția 1. Fiii nodului aflat pe poziția 6 se află pe pozițiile:
  1. 7 și 8
  2. 11 și 12
  3. 12 și 13
  4. 3 și 12
Vezi răspunsul
12 și 13. Formula reprezentării secvențiale: fiul stâng al nodului i este 2i, fiul drept 2i+1 — deci 12 și 13. Poziția 3 din ultima variantă este tatăl nodului 6 (6 div 2), nu fiul lui — exact confuzia dintre urcare și coborâre în arbore.
5. Într-un max-heap cu elemente distincte, care afirmație este obligatoriu adevărată?
  1. fiul stâng al oricărui nod este mai mic decât fiul drept
  2. cel mai mare element se află în rădăcină
  3. parcurgerea în inordine produce elementele în ordine descrescătoare
  4. cel mai mic element se află pe ultimul nivel, pe ultima poziție
Vezi răspunsul
cel mai mare element se află în rădăcină. Proprietatea de max-heap spune că fiecare tată este mai mare decât fiii, deci pe drumul de la orice nod spre rădăcină valorile cresc — maximul e în rădăcină. Între frați nu există nicio relație de ordine (prima variantă cade), iar minimul e undeva printre frunze, dar nu neapărat pe ultima poziție a vectorului.
6. Un arbore cu rădăcină cu 9 noduri este dat prin vectorul de tați t = (3, 3, 0, 3, 4, 4, 4, 7, 7). Câte frunze are arborele?
  1. 3
  2. 4
  3. 5
  4. 6
Vezi răspunsul
6. Frunzele sunt nodurile care nu apar ca valoare în vectorul de tați, adică nu sunt tată pentru nimeni. Valorile care apar în t sunt doar 3, 4 și 7, deci au fii numai aceste trei noduri; celelalte șase — 1, 2, 5, 6, 8 și 9 — sunt frunze. Cine răspunde 3 a numărat de fapt nodurile interne (tații), exact mulțimea complementară celei cerute.
Deschide varianta interactivă — cu AI care îți explică
← GrafuriStructuri de date avansate →
BiologieChimieEconomieFilosofieFizicăGeografieInformatică și TICIstorieLogică și argumentareMatematicăPsihologieLimba și literatura română