Documente Academic
Documente Profesional
Documente Cultură
2 8
4
4
( a) (b)
5 25
1
Vom compara apoi 62 cu 50. Din moment ce 62 90
este mai mare decât 50, nodul 62 va trebui plasat 62
undeva în subarborele drept al lui 50. 50 97
0
20 75
5 25
5 25
5 25 62
În prezenţa declaraţiilor:
typedef struct nod
{ int inf; nod *st,*dr;
} ABC;
următoarea funcţie realizează adăugarea unui nod într-un ABC după metoda descrisă mai sus:
`
A1 A1
b. Nodul p are un singur fiu. Înlocuim legătura spre p cu o legătură spre unicul fiu al lui p.
t t
p
A2
`
A1 A2 A1
c. Nodul p are exact doi fii. Vom reduce acest caz la una dintre situaţiile a. sau b., conservând
proprietatea de arbore binar de căutare. Pentru aceasta vom determina nodul cu cea mai mare cheie din
subarborele stâng al lui p, notat max.
Vom înlocui cheia lui p cu cheia nodului max şi vom şterge nodul max, care nu are fiu drept.
Deoarece nodul max este situat în subarborele stâng al lui p, are cheia mai mică decât nodurile din
subarborele drept şi mai mare decât a nodurilor din subarborele stâng, deci arborele astfel obţinut este
arbore binar de căutare.
Se poate proceda în mod analog, păstrând consistenţa arborelui binar de căutare înlocuind cheia lui p
cu cheia nodului cu cea mai mică cheie din subarborele drept al lui p, notat min, nod care nu are fiu stâng
şi ştergând apoi nodul min.
Exemplu. Să ştergem, din arborele binar de căutare următor, nodul cu valoarea 18.
25
Acest nod are doi fii. Vom determina maximul din
18 50 subarborele stâng al nodului cu valoarea 18 (nodul
cu valoarea 12), înlocuim cheia 18 cu cheia 12, apoi
12 20 46 99
ştergem maximul din subarborele stâng (acest nod
7 19 22 49 nu are fiu drept ). Obţinem arborele:
25
Programul următor gestionează operaţiile de creare şi
12 50 prelucrare a unui ABC. Se crează un arbore iniţial din
n valori citite de la tastatură. Prin intermediul unor
7 20 46 99 opţiuni de meniu se poate realiza în mod repetat
adăugarea unui nod în ABC, căutarea unei valori x,
ştergerea unei valori x şi afişarea nodurilor din arbore în
19 22 49
inordine (ordonate crescător după chei):
3
include <iostream>
using namespace std;
switch(opt)
{
case 1: {cout<<"valoarea: "; cin>>x;
Cauta(rad,x); break;}
case 2: {cout<<"valoarea: "; cin>>x;
Adauga(rad,x); break;}
case 3: {cout<<"valoarea: "; cin>>x;
Stergere(rad,x); break;}
case 4: SRD(rad);
}
}while(opt!=5);
}