Ciao
maghat ha scritto:
int vha1sucessore(BinTree src){//controlla che il nodo abbia un solo successore
if(src->right==NULL && src->left!=NULL){ // c' è solo ramo sinistro
if(src->left->left==NULL && src->left->right==NULL) //controlla che il ramo sinistro non abbia figli
{return src->info;}} //ritorna il valore del nodo in quanto non ha figli
if(src->right!=NULL && src->left==NULL) { // controlla che c' è solo il ramo destro
if (src->right->right==NULL && src->right->left==NULL){//controlla che non abbia figli
return src->info;}}// ritorna il valore ddel nodo in quanto non ha figli
return 0;} // se le condizioni non sono rispettate, vuol dire che il nodo non ha 1 solo successore e ritorna 0
allora da quanto hai scritto hai lo stesso problema di prima!
analizziamo bene cosa fa il tuo codice:
if(src->right==NULL && src->left!=NULL){ // c' è solo ramo sinistro
if(src->left->left==NULL && src->left->right==NULL) //controlla che il ramo sinistro non abbia figli
{return src->info;}} //ritorna il valore del nodo in quanto non ha figli
qui verifichi se il nodo letto a un link sinistro
poi vai a vedere se il nodo del link sinistro non ha link validi.
se c'e li ha che cosa fai?
annulli tutto
if(src->right!=NULL && src->left==NULL) { // controlla che c' è solo il ramo destro
if (src->right->right==NULL && src->right->left==NULL){//controlla che non abbia figli
e vai a fare la stessa cosa per il link destro nel quale si verifica lo stesso problema!
termini la routine
quando :
1) il link successivo di un nodo è <> null (non importa se destro o sinistro!)
2) quando entrambi i link del nodo letto sono <> Null
la seconda condizione ci può pure stare ma la prima no! xche cosi non scorri tutto l'albero!
la cosa funziona nel seguente modo:
1) leggi il nodo
2) il nodoletto ha entrambi i link a null?
2.1) si allora termina la routine
3) il nodo letto ha un solo link?
3.1) si varsomma = varsomma+dato del nodo letto o varsomma=varsomma+link
3.2)vai al punto 1 utilizzando il link disponibile.
4)no termina routine facendo restituire un codice che significhi albero troppo complesso.