This shows you the differences between two versions of the page.
sd-ca:laboratoare:lab-09 [2025/04/14 00:04] alexandra.lache0802 [Laborator 9 - ABC și Heap] |
sd-ca:laboratoare:lab-09 [2025/05/06 11:20] (current) alexandra.lache0802 [Ștergerea] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Laborator 9 - ABC și Heap ====== | + | ====== Laborator 7 - ABC și Heap ====== |
Responsabili | Responsabili | ||
Line 66: | Line 66: | ||
<note tip> | <note tip> | ||
- | În cazul ștergerii unui nod frunză sau a unui nod având un singur succesor, legătura de la părintele nodului de șters este înlocuită prin legătura nodului de șters la succesorul său (**NULL** în cazul frunzelor). | + | * Ștergerea unui nod frunză sau a unui nod cu un singur copil dintr-un arbore binar de căutare este o operație simplă. Pe lângă eliminarea efectivă a nodului, este necesară și actualizarea referinței din nodul părinte, astfel încât aceasta să pointeze către copilul nodului șters (dacă există) sau către NULL, în cazul în care nodul șters era o frunză. |
+ | |||
+ | * Eliminarea unui nod cu doi succesori este mai complexă, deoarece trebuie menținută proprietatea specifică arborilor binari de căutare (BST). În acest caz, nodul de șters este înlocuit cu un nod care are o valoare apropiată, astfel încât structura și regulile arborelui să rămână corecte. O soluție frecvent utilizată este **înlocuirea cu nodul care are cea mai mică valoare din subarborele drept** (adică nodul cel mai din stânga din acel subarbore). Acest nod este garantat a fi //mai mare decât toate valorile din subarborele stâng// și //mai mic decât celelalte valori din subarborele drept//, păstrând astfel ordinea specifică unui arbore binar de căutare. | ||
- | Eliminarea unui nod cu doi succesori se face prin înlocuirea sa cu nodul care are cea mai apropiată valoare de nodul șters. Acesta poate fi din extremitatea dreaptă a subarborelui stâng (**predecesorul**; se caută cel mai mare nod din acest subarbore, adică "se merge" în dreapta până se ajunge la un nod cu cel mult un succesor, aflat evident în partea stângă, altfel am putea avansa în adâncime pe dreapta) sau nodul din extremitatea stânga a subarborelui drept (**succesorul**; se caută cel mai mic nod din acest subarbore, adică "se merge" în stânga până se ajunge la un nod cu cel mult un succesor, aflat evident în partea dreaptă, altfel am putea avansa în adâncime pe stânga). | ||
</note> | </note> | ||
Line 206: | Line 207: | ||
<note> | <note> | ||
- | Un arbore este **echilibrat** dacă fiecare subarbore este echilibrat și înălțimea oricăror doi subarbori diferă cu cel mult 1. | + | Un arbore este **echilibrat** dacă pentru fiecare nod din arbore diferența în valoare absolută dintre înălțimile subarborilor acestuia este cel mult 1. |
</note> | </note> | ||
{{ :sd-ca:laboratoare:balancedtree-example.png?600 |}} | {{ :sd-ca:laboratoare:balancedtree-example.png?600 |}} | ||
- | ===== Schelet ===== | ||
- | |||
- | {{:sd-ca:laboratoare:lab09_2023_1.zip|Schelet de laborator}} | ||
===== Exerciții ===== | ===== Exerciții ===== | ||
<note> | <note> | ||
- | Trebuie să vă creați cont de [[https://lambdachecker.io | Lambda Checker]], dacă nu v-ați creat deja, pe care îl veți folosi la SD pe toată durata semestrului. Aveti grija sa selectati contestul corect la submit, si anume **[[https://beta.lambdachecker.io/contest/36|Laborator 9 SD]]** | + | Trebuie să vă creați cont de [[https://code.devmind.ro | Devmind]], dacă nu v-ați creat deja, pe care îl veți folosi la SD pe toată durata semestrului. |
</note> | </note> | ||
- | 1) [**3.5p**] ABC | + | 1) [**3.5p**] BST |
- | Task1 va testa operațiile de insert, remove și afișarea (în ordine) a elementelor introduse în ABC. | + | Task1 va testa operațiile de insert, remove și afișarea (în ordine) a elementelor introduse în BST. |
2) [**3.5p**] Heap | 2) [**3.5p**] Heap | ||
Line 245: | Line 243: | ||
Se dă un arbore binar de căutare cu valori de tip întreg. Să se întoarcă a k-a cea mai mică valoare din arbore. | Se dă un arbore binar de căutare cu valori de tip întreg. Să se întoarcă a k-a cea mai mică valoare din arbore. | ||
- | 4) [**BONUS 1p**] BST Two-Sum | ||
- | |||
- | Se dă un arbore binar de căutare cu valori de tip întreg. Să se verifice daca există doua noduri ale căror valori însumate dau valoarea căutată. Daca există se va intoarce 1, iar în caz contrar se va întoarce 0. | ||
- | |||
- | 5) [**BONUS 2p**] Heap K-Largest | ||
- | |||
- | Sa se gaseasca al K-lea cel mai mare numar dintr-o lista, utilizand un heap binar. | ||
===== Bibliografie ===== | ===== Bibliografie ===== |