Originariamente inviato da ziolu80
questa è la mia soluzione :
private static boolean noFigli(AlberoB a){
if(a==null)return false;
return a.getDes()==null && a.getSin()==null;
}
private static boolean nodiUguali(AlberoB a,int radice){
if(a!=null || !noFigli(a)){
if(noFigli(a.getDes())&& noFigli(a.getSin())){
return(Integer)a.getDes().getVal()==radice && (Integer)a.getSin().getVal()==radice;
}
else if(noFigli(a.getSin()) && (!noFigli(a.getDes()))||a.getDes()==null){
return(Integer)a.getSin().getVal()==radice;
}else if(noFigli(a.getDes())&& (!noFigli(a.getSin()))|| a.getSin()==null)
return(Integer)a.getDes().getVal()==radice;
}
return nodiUguali(a.getDes(),radice) && nodiUguali(a.getSin(),radice) ;
}
private static boolean analizzaNodiFoglia(AlberoB a){
int radice=(Integer)a.getVal();
return nodiUguali(a,radice);
}
public static void main(String[] args) {
AlberoBImpl a= new AlberoBImpl(0);
AlberoBImpl des=new AlberoBImpl(3);
AlberoBImpl desd=new AlberoBImpl(0);
AlberoBImpl dess=new AlberoBImpl(0);
AlberoBImpl sin=new AlberoBImpl(6);
AlberoBImpl sind=new AlberoBImpl(0);
des.setDes(desd);
des.setSin(dess);
sin.setDes(sind);
a.setDes(des);
a.setSin(sin);
System.out.println(analizzaNodiFoglia(a));
}
}
se l'albero ha dei figli il programma funziona me si passo un null oppure un albero senza figli cioè solo la radice mi restituisce un null point exception alla linea di codice return nodiUguali(a.getDes(),radice) && nodiUguali(a.getSin(),radice). Come posso risolvere ?
Ps AlberoBImpl è implementazione dell'interfaccia AlberoB, getDes() restituisce il sotto albero destro getSin() restituisce il sotto albero sinistro getVal() restituisce il contenuto della radice e setDes e setSin permettono di settare , rispettivamente con un albero il sotto albero destro e sinistro. Questa classe si basa su un albero binario.
Grazie a tutti per l'attenzione e la cortesia.