Ciao,
Ho fatto due procedure per cancellare l'elemento dall'albero binario ma entrambe hanno problemi...se dico di cancellare 4 ed esso è inserito tre volte loro cancellano solo il primo quattro mentre gli altri due rimangono...qualcuno sa aiutarmi?
codice:
ALBERO* deleteAlbero (ALBERO* a, int v)
{
	ALBERO* t,*l,*r;
	int f;
	if (a==NULL)
		return NULL;
	else
	{
		if (a->val !=v)
		{
			t=a;
			f=0;
			while(f==0)
			{
				if (t->val<v)
					if(t->right==NULL || t->right->val == v)
						f=1;
					else
						t=t->right;
				else
					if(t->left==NULL || t->left->val == v)
						f=2;
					else
						t=t->left;


			}
			if (f==1)
			{
				l=t->right->right;
				r=t->right->left;
				free(t->right);
				t->right = r;
				if (t->right ==NULL)
					t->right=l;
				else
				{
					t=t->right;
					while (t->left !=NULL)
					{
						t=t->left;
					}
					t->left=l;
				}

			}
			else
			{
				l=t->left->left;
				r=t->left->right;
				free(t->left);
				t->left = r;
				if (t->left ==NULL)
					t->left=l;
				else
				{
					t=t->left;
					while (t->left !=NULL)
					{
						t=t->left;
					}
					t->left=l;
				}

			}
			return a;

		}
		else
		{
			l= a->left;
			r=a->right;
			free(a);
			if(r==NULL)
				return l;
			else
			{
				t=r;
				t = t->left;
				while (t->left !=NULL)
				{
					t=t->left;
				}
				t->left=l;
			}
			}
		}
	}



/*****************************************************************/
ALBERO* deleteAlberoR(ALBERO *a, int v)
{
ALBERO *l, *r, *t;
	if(a==NULL)
		return NULL;
	else
	{
		l=a->left;
		r=a->right;
		if(a->val > v)
			l=deleteAlberoR(l, v);
		else 
			r=deleteAlberoR(r, v);
		if(a->val != v)
		{
			a->left = l;
			a->right = r;
			return a;
		}
		else
		{
			free(a);
			if(r==NULL)
				return l;
			else
				return r;

		}
}


}