Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    errore visita dfs Albero

    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();
    		
    	}
    
    }

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Devi istanziare il campo visitatiPila:
    codice:
    public void visitaIterativaDFS(){
            visitatiPILA=new LinkedList<NodoBin>(); // alternativamente puoi farlo
            // nel costruttore, ma tanto c'è il garbage collector
        	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());
              }
        }
    A trarti in inganno sicuramente è stato il fatto che i tipi primitivi e i tipi appartenenti alle classi wrapper non necessitano di essere istanziati.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.