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...