Vi posto una mia soluzione la cancellazione di un nodo su un albero BST, siccome in qualche caso non lavoro chiedo a qualche esperto se mi può aiutare a modificare/cambiare radicalmente questa cancellazione.
codice:
void remove_1(node*& z,const int val){
node* f;
if( z == NULL )// fallisce la ricerca
cout << val << " non è presente nell'albero.\n";
else if( val < z->item)
remove_1(z->sx, val );
else if( val > z->item)
remove_1(z->dx, val ); //sicuri che si arriva a valore che si vuole cancellare
else {
node* to_be_deleted = z;
if(z->sx==NULL)
z=z->dx;
else if( z->dx==NULL)
z=z->sx;
else
{
to_be_deleted=successor(z);
f=father(to_be_deleted);
z->item=to_be_deleted->item;
z->sx=to_be_deleted->sx;
z->dx=to_be_deleted->dx;
if(f->dx==to_be_deleted)f->dx=NULL;
else f->sx=NULL;
}
delete to_be_deleted;
}
return;
}
lo struct dell'albero è banale
codice:
struct node{
int item;
node* sx;
node* dx;
node (int e){item=e;dx=sx=0;}
};
Spero mi possiate autare!! Grazie in anticipo...