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

    albero binario elimina nodo

    Salve,sto cercando di implementare un albero binario di ricerca qualcuno mi può aiutare ad implementare il metodo di rimozione di un nodo ,gentilmente ,mi perdo quando il nodo da eliminare non è una foglia ?
    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 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 o visita in profondita
    	private LinkedList<NodoBin> visitatiCODA;//per BFS o visita in ampiezza
    	
    	public AlberoBin() {
           radice=null;  visitatiPILA=new LinkedList<NodoBin>();
    	}
    
    	public NodoBin getRadice() {
    		return radice;
    	}
    	
    	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 ;
    	          stampa(radice);
    	}
    	
    	
    //VISITA IN PROFONDITA	
        public void visitaIterativaDFS(){
        	visitatiPILA.add(radice);
              while(! visitatiPILA.isEmpty()){
                 
            	  NodoBin nodoPrelevato= visitatiPILA.pop();
                     if(nodoPrelevato!= null)
                           System.out.println( "valutazione del nodo"+ nodoPrelevato.getDato()  );                      
            	   
                     if(nodoPrelevato.getFiglioSx()!=null)
                     visitatiPILA.push(nodoPrelevato.getFiglioSx());
            	     if(nodoPrelevato.getFiglioDx()!=null)
            	     visitatiPILA.push(nodoPrelevato.getFiglioDx());
              }
        }
        
        public void visitaIterativaBFS(){
           visitatiCODA.add(radice);
          
           while(!visitatiCODA.isEmpty()){
            	NodoBin prelevato= visitatiCODA.pop();  
        	      if(prelevato!= null)  
            	     System.out.println(prelevato.getDato());
        	      if(prelevato.getFiglioSx()!=null)
                      visitatiCODA.add(prelevato.getFiglioSx());
             	     if(prelevato.getFiglioDx()!=null)
             	     visitatiCODA.add(prelevato.getFiglioDx());   
           }
        	
        }
     
        public void eliminaNodi(      ){
        	
        	
        	
        	
        	
        }
       
        public void stampa(NodoBin n){
        	if(n== null)
                return ;
        	
        	stampa(n.getFiglioSx());
        	stampa(n.getFiglioDx());
        }
        
    
    
    public class AvviaAlbero {	
    	public static void main(String[] args) {
    		AlberoBin A1 =new AlberoBin();
    		
    	 	A1.insNodo(1);
    	 	A1.insNodo(2);
    	    A1.insNodo(1);
    	    A1.insNodo(1);
    	 	A1.insNodo(3);
    	 	A1.insNodo(4);
    	 
    		A1.stampaNodi();
    	    A1.visitaIterativaDFS();
    
    
    	    
    	    
    	}
    
    }

  2. #2
    eliminaNodo prende un puntatore a NodeBin oppure un valore...
    Se prende un puntatore a NodeBin basta confrontare i puntatori, se non fa parte dell'albero semplicemente scorrendo l'albero non lo troverai e quindi non eliminerai nulla...
    Ovviamente se il nodo che elimini ha un nodo child devi far puntare il child al parent del nodo eliminato.
    lolide
    Java Programmer

    Informati

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.