Documente Academic
Documente Profesional
Documente Cultură
AL REPUBLICII MOLDOVA
I.P. Centrul de Excelenţă în Informatică şi Tehnologii Informaţionale
Lucrare individuală Nr 1
Disciplina: Utilizarea tehnicilor clasice de programare
Chişinău, 2019
Cuprins
1. Partea teoretică ........................................................................................................... 3
3.Bibliografie .................................................................................................................... 9
1. Partea teoretică
Un arbore este o structură ramificată formată dintr-un nod A (rădăcina) și un număr finit de
arbori (subarbori) ai lui A.
- orice nod din arbore este rădăcină pentru un subarbore iar orice arbore poate deveni
subarbore;
- doi subarbori pot fi în relaţie de incluziune, când un subarbore este inclus în celălalt sau de
excluziune, când nu au noduri comune.
Definiţii:
nod = punct în care se întâlnesc doi subarbori;
nivel = numărul de noduri parcurse de la rădăcină până la un nod;
rădăcină = nivel 1;
descendent = primul nod al unui subarbore;
nod terminal = nod fără descendenţi;
înălţimea unui nod = numărul maxim de niveluri;
arbore binar = arbore în care toate nodurile au 2 descendenţi;
Operația Aloritmul
Căutare Se compara cheia cu nodul curent. Dacă este mai egală,
am găsit nodul, dacă este mai mică căutăm în subarborele
stâng, altfel căutăm în subarborele drept. Căutarea se
opreşte când nodul a fost găsit sau s-a atins baza
arborelui.
Adăugare
Se caută folosind algoritmul de căutare poziţia în arbore şi se alocă
memoria şi se face legătura cu nodul părinte.
Parcurgerea în inordine SRD – se parcurge mai întâi în inordine suarborele stâng S, apoi
rădăcina R, apoi se parcurge în inordine subarborele drept D.
Pentru arborele din figură, şirul parcurgerii SRD este: 4 2 5 1 6 3.
Se citesc din fisierul arbore.in de pe prima linie două numere n şi R reprezentând numărul de
noduri şi rădăcina unui arbore binar.
De pe a doua şi a treia linie se vor citi câte n elemente reprezentând rădăcinile subarborilor
stâng şi respectiv drept al fiecărui nod, sau 0 dacă nu există subarborele.
Afişaţi pe ecran şirurile parcurgerilor RSD, SRD şi SDR ale arborelui citit.
arbore.in rezultate
81 RSD: 1 2 4 5 6 3 7 8
24700000 SRD: 4 2 5 6 1 7 3 8
35806000 SDR: 4 6 5 2 7 8 3 1
34. if(p>0)
35. {SDR(St[p]);
36. SDR(Dr[p]);
37. cout<<p<<' ';}
38.
39. }
40. int main()
41. {
42. citire();
2. Program rezolvat
Cerință
Exemplul 1:
arbore.in
7
6663303
arbore.out
NU
NU
Exemplul 2:
arbore.in
6
666330
arbore.out
NU
DA
Exemplul 3:
arbore.in
6
066331
arbore.out
DA
60
00
45
00
#include <iostream> if(S[T[i]]==0)
#include <fstream> S[T[i]]=i;
using namespace std; else D[T[i]]=i;
ifstream fin("arbore.in"); }
ofstream fout("arbore.out"); for(int i=1;i<=n;i++)
fout<<S[i]<<"
"<<D[i]<<endl;
int
n,T[101],F[101],S[101],D[101],G[1 }
01];
else
{
int main()
fout<<"NU\n";
{
//cerinta b (cu vectorul
fin>>n; de grade)
for(int i=1;i<=n;i++) ok=1;
{ for(int i=1;i<=n;i++)
fin>>T[i]; if(G[i]>=4) ok=0;
F[T[i]]++;//pt a if(ok) fout<<"DA";
if(T[i]!=0)//pt b else fout<<"NU";
{ }
G[i]++; return 0;
G[T[i]]++; }
}
}
//cerinta a
int ok=1;
for(int i=1;i<=n;i++)
if(F[i]>2) ok=0;
if(ok)
{
fout<<"DA\n";
for(int i=1;i<=n;i++)
if(T[i]!=0)
{
3.Bibliografie
http://info.mcip.ro/?cap=arbori&prob=830
http://tet.pub.ro/pages/Sda/lucrarea4.pdf
https://asandului.files.wordpress.com/2015/03/parcurgerea-arborilor-binari-c59fi-
aplicac5a3ii.pdf