Arbori cu rădăcină


Editat de Candale Silviu (silviu) la data 2018-02-04

Arbore liber

Un arbore este un graf conex și aciclic. Se mai numește și arbore liber.

Următoarele propoziții sunt adevărate:

  • Un arbore cu n vârfuri are n-1 muchii.
  • Un arbore este un graf conex și minimal cu această proprietate; dacă s-ar mai elimina o muchie, graful nu ar mai fi conex.
  • Un arbore este un graf aciclic și maximal cu această proprietate; dacă s-ar mai adăuga o muchie, s-ar obține un ciclu.
  • Între oricare două vârfuri ale unui arbore există un lanț elementar unic.

Arbori cu rădăcină

Pentru un arbore se poate stabilii un nod special, numit rădăcină. Putem spune că “agățăm” arborele în rădăcină, iar restul nodurilor cad.

Mai jos avem trei arbori cu rădăcină. Toți pornesc de la arborele de mai sus, dar diferă prin alegerea rădăcinii.

Terminologie

Fie un arbore cu rădăcina r și x un nod în acest arbore. atunci:

  • se numește ascendent al lui x orice nod y aflat pe lanțul de la rădăcină la x.
    • rădăcina nu are ascendenți
    • rădăcina este ascendent pentru toate nodurile din arbore
  • dacă y este ascendent al lui x și există muchia (y,x), atunci y se numește ascendent direct al lui x sau tatăl lui x
    • rădăcina este singurul nod din arbore care nu are tată
  • un nod y este descendent al nodului x dacă x aparține lanțului de la r la y
    • dacă în plus există muchia (x,y), atunci y este descendent direct sau fiu al lui x
    • un nod care nu are niciun descendent se numește frunză
  • două noduri care au același tată se numesc frați
  • lungimea unui lanț de la rădăcina arborelui la un nod x reprezintă nivelul sau adâncimea nodului x
  • lungimea maximă a unui lanț de la rădăcină la un nod al arborelui reprezintă înălțimea arborelui
  • un nod al arborelui împreună cu toți descendenții săi formează un subarbore

Exemplu

Fie arborele următor:

  • rădăcina arborelui ieste nodul 3;
  • ascendenții nodului 4 sunt 5, 2 și 3. Ascendentul direct (tatăl) al nodului 4 este nodul 5;
  • descendenții nodului 2 sunt 1 7 10 5 4 6. Descendenții direcți ai nodului 2 sunt 1 5;
  • nodurile 1 și 5 sunt frați;
  • nodurile 6 7 8 10 12 sunt frunze;
  • descompunerea pe niveluri:
    • Nivelul 0 conține doar rădăcina: 3;
    • Nivelul 1 conține nodurile 2 9;
    • Nivelul 2 conține nodurile 1 5 8 11;
    • Nivelul 3 conține nodurile 7 10 4 12;
    • Nivelul 4 conține nodul 6;
  • Înălțimea arborelui este 4;
  • Nodurile 9 8 11 12 formează un subarbore;

Reprezentarea arborilor

Reprezentarea prin referințe descendente

Pentru fiecare nod al arborelui se memorează informații despre descendenții săi direcți. Este similară cu reprezentarea prin liste de adiacențe a grafurilor. Pentru arborele de mai sus avem:

  • F[1]={7,10}
  • F[2]={1,5}
  • F[3]={2,9}
  • F[4]={6}
  • F[5]={4}
  • F[6]={}
  • F[7]={}
  • F[8]={}
  • F[9]={8,11}
  • F[10]={}
  • F[11]={12}
  • F[12]={}

Reprezentarea prin referințe ascendente

Pentru fiecare nod se memorează informații despre ascendenții direcți. Vom obține un vector de tați, în care:

  • t[r] = 0, unde r este rădăcina arborelui
  • t[k] = tatăl nodului k

Pentru arborele de mai sus avem:

k 1 2 3 4 5 6 7 8 9 10 11 12
t[k] 2 3 0 5 2 4 1 9 3 1 9 11

Observații

  • În vectorul de tați există o singură valoare 0, corespunzătoare rădăcinii;
  • Frunzele corespund valorilor care nu apar în vectorul de tați.
  • Vectorul de tați ne permite să determinăm lanțuri în arbore, de la un nod oarecare spre rădăcină:
    • Pornim de la un nod dat x
    • Identificăm tatăl lui x, y = t[x];
    • Identificăm tatăl lui y, t[y]
    • ș.a.m.d.
    • Ajungem într-un nod z pentru care t[z]=0. acesta va fi rădăcina și ne oprim.

Fișiere atașate