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!