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; } } }

Rispondi quotando