Differences

This shows you the differences between two versions of the page.

Link to this comparison view

sd-ca:laboratoare:lab-08 [2022/04/27 17:43]
radu_stefan.minea [Laborator 8 - Arbori Binari]
sd-ca:laboratoare:lab-08 [2024/04/26 03:05] (current)
radu.nichita [Exerciții]
Line 1: Line 1:
 ====== Laborator 8 - Arbori Binari ====== ====== Laborator 8 - Arbori Binari ======
  
-Responsabili +Responsabili: 
-  * [[mailto:mitapirvuet@gmail.com|Mihai Pirvulet]] +  * [[mailto:popaiarina13@gmail.com|Iarina-Ioana Popa]] 
-  * [[mailto:radustefanminea@gmail.com|Radu Minea]]+  * [[mailto:andreipirlea03@gmail.com|Andrei Pîrlea]]
  
 ===== Obiective ===== ===== Obiective =====
Line 61: Line 61:
  
 Structura nodului de mai sus este clară: Structura nodului de mai sus este clară:
-*pointer către fiul stâng +  ​* pointer către fiul stâng 
-*pointer către fiul drept +  * pointer către fiul drept 
-*pointer către date+  * pointer către date
  
 Pentru a ne reaminti cum alocăm/​dealocăm memorie: Pentru a ne reaminti cum alocăm/​dealocăm memorie:
Line 105: Line 105:
 Exemplu: Exemplu:
 <code c> <code c>
-static ​void __b_tree_print_inorder(b_node_t *b_node, void (*print_data)(void *)) +void b_tree_print_inorder(b_node_t *b_node, void (*print_data)(void *)) { 
-+    if (!b_node) 
- if (!b_node) +        return;
- return;+
  
- /* TODO */ +    b_tree_print_inorder(b_node->​left,​ print_data);​ 
- __b_tree_print_inorder(b_node->​left,​ print_data);​ +    print_data(b_node->​data);​ 
- +    ​b_tree_print_inorder(b_node->​right,​ print_data);​
- print_data(b_node->​data);​ +
- +
- __b_tree_print_inorder(b_node->​right,​ print_data); +
-+
- +
-void b_tree_print_inorder(b_tree_t *b_tree, void (*print_data)(void *)) +
-+
- __b_tree_print_inorder(b_tree->​root,​ print_data);​ +
- printf("​\n"​);+
 } }
 </​code>​ </​code>​
Line 192: Line 182:
 ===== Schelet ===== ===== Schelet =====
  
 +<note important>​
 +Daca folositi **Github Classroom**,​ va rugam sa va actualizati scheletul cu cel de mai jos. Cel din repo-ul clonat initial nu este la cea mai recenta versiune.
 +</​note>​
  
-{{:​sd-ca:​laboratoare:​lab_8:​lab08_trees.zip|}} +{{:​sd-ca:​laboratoare:​lab8_2022.zip|Scheletul de laborator}}
- +
- +
-<​hidden>​ +
-Laboratoare vechi: +
- +
-{{:​sd-ca:​laboratoare:​lab_8:​lab08.zip|}} +
- +
-{{:​sd-ca:​laboratoare:​lab_8:​lab8skel.zip|Schelet}} +
- +
-https://​drive.google.com/​open?​id=1mCiLKlUPNAJORs5ebGDi0GK-M3kPJ2wQ +
- +
-{{:​sd-ca:​laboratoare:​lab_8:​lab8skel.zip|Schelet}} +
- +
-</​hidden>​+
  
  
 ===== Exerciții ===== ===== Exerciții =====
  
-<​note ​important+<​note>​ 
-Pentru a rezolva laboratorul folosind Github Classroom, urmați [[sd-ca:laboratoare/tutorial-github-classroom#​adaugarea_solutiei_unui_laborator|acești pași]]. Asigurați-vă ca ați creat branchul pentru acest laborator ​**din branchul ''​master''​** al repository-ului vostru.+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/​75/​problems |Laborator 8 SD]]**
 </​note>​ </​note>​
  
-1) [**4p**] ​Implementați,​ compilați si testați funcțiile din //​**binary_tree.c**//​. +1) [**4p**] ​Implementarea ​arborelui binar. ​Problema ​**SD-CA-LAB-08-Binary-Tree** pe LambdaChecker.
- +
-Inserarea se va face recursiv, pe prima poziție liberă găsită. +
- +
-**311CAa**) [**3p**] Calculați înălțimea ​arborelui+
- +
-**311CAb**) [**3p**] Verificați dacă toate frunzele din arbore se află pe același nivel. +
- +
-**312CAa**) [**3p**] Fiind dat un arbore ​binar ale cărui noduri reţin valori întregi, verificați dacă valoarea din fiecare nod este egală cu suma valorilor copiilor săi. +
- +
-**312CAb**) [**3p**] Verificați dacă arborele este echilibrat. +
- +
-**313CAa**) [**3p**] Fiind dat un număr natural n, afişaţi toate nodurile de pe nivelul n din arbore. +
- +
-**313CAb**) [**3p**] Se dau două noduri A şi B din acelaşi arbore. Determinaţi cel mai jos strămoş comun al celor două noduri (LCA). +
- +
-**314CAa**) [**3p**] Afișați toate drumurile de sumă maximă din rădăcină până într-una dintre frunze. +
- +
-**314CAb**) [**3p**] Un arbore binar complet este un arbore binar în care fiecare nivel, cu posibila excepţie a ultimului nivel, este plin de noduri. Cu alte cuvinte, fiecare nivel este “umplut” de la stânga la dreapta cu noduri, iar ultimul nivel poate să nu fie umplut până la capăt. +
-Fiind dat un arbore binar, determinaţi dacă acesta este complet. +
- +
-**315CAa**) [**3p**] Găsiți un subarbore cu suma nodurilor maximă.+
  
-**315CAb**) [**3p**] ​Fiind dat un arbore binar ale cărui noduri reţin valori întregi, verificaţi dacă pentru fiecare nod din arbore este adevărat faptul că valoarea sa este mai mare decât valoarea copilului stâng şi mai mică decât valoarea copilului drept.+2) [**3p**] ​O problema **aleasa de catre asistent** ​din cele ramase.
  
-**Bonus** [**2p**] Eliberați memoria unui arbore binar în O(1memorieadică fără a folosi recursivitate ​sau prea multe variabile declarate cu acest scop.+3) [**Bonus**] ​1p bonus pe fiecare problema ​(easy sau mediumin plus pe care o rezolvatimaxim 2p bonus pentru o problema **easy** si una **medium** ​sau 2 **medium**.
  
 ===== Interviu ===== ===== Interviu =====
sd-ca/laboratoare/lab-08.1651070600.txt.gz · Last modified: 2022/04/27 17:43 by radu_stefan.minea
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0