Professional Documents
Culture Documents
27
188
22
12
25
15
14
5
10
8
7
28
16
24
26
struct Nod
{
int val;
Nod*st, *dr;
};
Nod*rad=NULL;
void StergNod(Nod*&rad, int valsters)
{
if (rad!=NULL)
//daca mai sunt noduri de parcurs se cauta valoarea
if (valsters<rad->val)
StergNod(red->st, vasters);
//stergere din subarbore stang
else
if (valsters>rad->val)
StergNod(rade->dr, valsters);
//stergere din subarbore drept
else
{
if (rad->st==NULL && rad->dr==NULL)
//s-a gasit nodul de sters
//I situatie: stergere nod terminal
delete rad; // daca nu reanulam, pe parcurgere, vor fi probleme
else
if (rad->dr==NULL)
{
//nodul are doar subarbore stang
//inlocuim radacina cu subarborele stang
Nod*sters=rad;
rad=rad->st;
delete sters;
}
else
if (rad->st==NULL)
{
//nodul are doar subarbore drept
//inlocuim radacina cu subarborele sau drept
New *sters=rad;
rad=rad->dr;
delete *sters;
}
else
//nodul are ambii subarbori
//identificarea celui mai mare nod al subarborelui stang (nodul
dezalocat)
//nodul dezalocat are doar subarbore stang
{
Nod*sters=rad->st, *tatasters=rad;
while (sters->dr!=NULL)
{
if (s->dr->dr=NULL)
{tatasters=s
sters=s->dr;}
s=s->dr;
}
rad->val=sters->val;
if(rad->st==sters)