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:
Uso una classe di albero binario semplificato: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; } }
Avete qualche suggerimento?codice:public class SimpBtree<E> { private SimpBtree<E> left,right; private E root; public static final SimpBtree EMPTYBTREE=new SimpBtree(); }grazieeee!

grazieeee!
Rispondi quotando
