Salve per esercizio sto cercando di implementare un albero binario,(premessa è la prima volta) ottengo un nullpointerException al metodo di visitaIterativaDfs ,nella classe AlberoBin chi mi aiuta??


codice:
public class NodoBin {
	
   private int dato;
   private NodoBin figlioSx;
   private NodoBin figlioDx;
  
   
   NodoBin(int d) {
    figlioDx=null; figlioSx=null;
    dato=d;
   }
	
    public void inserimNodoInterno(int val){  
    	if(val<=dato)	{
	        	if(figlioSx!=null)	   
	            	figlioSx.inserimNodoInterno(val);
	        	else 
	        		 figlioSx = new NodoBin(val);
	      }
	          else{
		    	 	if(figlioDx!=null)	   
		            	figlioDx.inserimNodoInterno(val);
		        	else 
		        		 figlioDx = new NodoBin(val);
		      }
   }	
    
   public void stampaNodo( ){
    System.out.println("ecco il dato  "+dato);
    
	        if(figlioSx!=null)
	         figlioSx.stampaNodo();
	        if(figlioDx!=null)
	         figlioDx.stampaNodo();
   } 
    
  public int getDato() {
	return dato;
  }
   
  public NodoBin getFiglioDx() {
	return figlioDx;
}
  public NodoBin getFiglioSx() {
	return figlioSx;
}
   
}


public class AlberoBin {
  
	private NodoBin radice;
	private LinkedList<NodoBin> visitatiPILA; //per DFS
	
	public AlberoBin() {
       radice=null;  visitatiPILA=null;
	}
	
	public boolean alberoVuoto(){
		if(radice ==null)return true;
		return false;
	}

	public void insNodo(int v){
		if( alberoVuoto() )
		   radice = new NodoBin(v);
		else
		   radice.inserimNodoInterno(v);
	}
	
	public void stampaNodi(){
		if( alberoVuoto() )  return ;
		radice.stampaNodo();
	}
	
    public void visitaIterativaDFS(){
    	visitatiPILA.add(radice);
          while(! visitatiPILA.isEmpty()){///////nullPointerException 
             
        	  NodoBin nodoPrelevato= visitatiPILA.pop();
                 if(nodoPrelevato!= null)
                       System.out.println( "valutazione del nodo"+ nodoPrelevato.getDato()  );                      
        	     visitatiPILA.push(nodoPrelevato.getFiglioSx());
        	     visitatiPILA.push(nodoPrelevato.getFiglioDx());
          }
    }
 
    
  
}

public class AvviaAlbero {

	
	public static void main(String[] args) {
		AlberoBin A1 =new AlberoBin();
		
	 	A1.insNodo(1);
	 	A1.insNodo(2);
	 	A1.insNodo(3);
	 	A1.insNodo(4);
	 	
		
	       A1.visitaIterativaDFS();
		
	}

}