Ciao a tutti. Devo creare un metodo che prende un SimpBtree(albero binario) e restituisce true se e solo se l’albero è quasi perfettamente bilanciato (cioè le foglie si trovano tutte ad altezza h o h-1).
Di idee ne ho tante ma non riesco a implementarlo. Ho creato un metodo che mi restituisce true se e solo se l’albero è Perfettamente Bilanciato( cioè le foglie si trovano tutte ad altezza h), ma non riesco a modificarlo in modo che mi restituisca true se l'albero è QUASI perfettamente bilanciato.
Questa era la mia idea: In caso di albero non Perfettamente Bilanciato andavo a controllare se l'albero con altezza h-1 era perfettamente bilanciato. Se l'albero a altezza h-1 è perfettamente bilanciato allora tutto l'albero sarà QUASI perfettamente bilanciato.
Questo è il codice di perfettamente bilanciato:
codice:
public boolean bilanciato(){
return this.bilanciato1()>=0;
}
public int bilanciato1(){
if(this==EMPTYBTREE)return -1;
else // è una foglia
if(left==EMPTYBTREE&&right==EMPTYBTREE)return 0;
else // solo uno dei 2 sottoalberi è vuoto
if(left!=EMPTYBTREE&&right==EMPTYBTREE||left==EMPTYBTREE&&right!=EMPTYBTREE)
return -1;
else//entrambi i sottoalberi sono non vuoti
{int h1=left.bilanciato1();
if(h1<0)return -1;
int h2=right.bilanciato1();
if(h2<0)return -1;
return (h1==h2)?h1+1:-1;
}
}
Uso una classe di albero binario semplificato:
codice:
public class SimpBtree<E>
{
private SimpBtree<E> left,right;
private E root;
public static final SimpBtree EMPTYBTREE=new SimpBtree();
}
Avete qualche suggerimento?
grazieeee!