Structurile de date neliniare sunt fundamentale în informatica modernă, deoarece modelează relații complexe între elemente, spre deosebire de structurile liniare (liste, stive, cozi). Două dintre cele mai importante sunt arborii binari și grafurile.
Un arbore binar este o structură ierarhică în care fiecare nod are cel mult doi copii: stânga și dreapta. Proprietățile cheie includ: rădăcina (primul nod), nodurile interne (cu cel puțin un copil) și frunzele (fără copii). Înălțimea arborelui este numărul maxim de muchii de la rădăcină la o frunză.
Arborii binari sunt utilizați în căutări rapide (arbori binari de căutare – BST), heap-uri pentru priorități, arbori de expresii matematice și multe altele. Parcurgerile clasice sunt: în preordine (rădăcină, stânga, dreapta), în inordine (stânga, rădăcină, dreapta – pentru BST dă elemente sortate), în postordine (stânga, dreapta, rădăcină) și pe niveluri (BFS). Operațiile uzuale sunt inserarea, ștergerea, căutarea, aflarea înălțimii și traversările recursive sau iterative.
Un graf este o mulțime de noduri (vârfuri) conectate prin muchii. Se clasifică în: orientat (muchii cu direcție) și neorientat (muchii bidirecționale); ponderat (muchii cu cost) și neponderat. Reprezentările uzuale sunt matricea de adiacență (O(n^2) memorie) și lista de adiacență (eficientă pentru grafuri rare).
Parcurgerile fundamentale sunt BFS (breadth-first search) și DFS (depth-first search), esențiale pentru probleme de conectivitate, componente conexe, drumuri minime (Dijkstra, Bellman-Ford), sortare topologică (grafuri orientate aciclice) și determinarea arborelui minim de acoperire (Kruskal, Prim). Complexitățile variază: O(n+m) pentru parcurgeri, O((n+m) log n) pentru Dijkstra cu heap.
La BAC, elevii trebuie să implementeze în C++/Python operații pe arbori binari (creare, traversări, căutare) și pe grafuri (BFS, DFS, determinare componente conexe, verificare ciclicitate, drum minim neponderat). Înțelegerea proprietăților de conexitate, aciclicitate și a modului de stocare în memorie este crucială.
Exemple practice: arborele binar de căutare pentru stocarea unui dicționar; grafurile pentru rețele sociale sau hărți rutiere. Abordarea pedagogică presupune începerea cu definiții, trecerea la reprezentări vizuale, apoi la implementări pas cu pas, subliniind cazurile particulare (arbore vid, graf fără muchii, etc.).
Concepte cheie: Arbore binar: definiție, noduri, rădăcină, frunze, înălțime, Parcurgeri: preordine, inordine, postordine, BFS (pe niveluri), Arbore binar de căutare (BST): proprietatea de ordonare, operații (căutare, inserare, ștergere), Graf: definiție, noduri, muchii, orientat/neorientat, ponderat/neponderat, Reprezentări: matrice de adiacență, listă de adiacență, Parcurgeri graf: BFS (coadă), DFS (stivă/recursiv), aplicații (componente conexe, drum minim în muchii), Detectare cicluri în graf orientat/neorientat, Sortare topologică (graf orientat aciclic – DAG), Arbore minim de acoperire (MST): algoritmii Kruskal și Prim, Drum minim: algoritmul Dijkstra, Bellman-Ford (pentru muchii cu costuri negative)
Vrei exerciții pe lecția asta + AI care te ajută pas cu pas?
Cont gratuit — 20 întrebări AI/zi, exerciții nelimitate.