Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    205

    [Java]alberi binari contaBiGenitori

    Ciao,
    devo eseguire un metodo che restituisca il numero di nodi dell'albero che hanno almeno due figli, non riesco a formare il cilclo per far andare avanti il controllo, se faccio un metodo ricorsivo cosa metto come parametro al metodo? posto il codice da me svuiluppato
    codice:
       public int contaBiGenitori() {
       
        return contaBiGenitori(root);
       }
       
      public int contaBiGenitori(BinaryNode node) {
       int cont=0;;
        try {
         if((node.getLeftChild() != null) && (node.getRightChild() != null)) {//qui controllo la radice
        	cont++;
        }
       }
       catch(NullPointerException e) {
        if(root==null)
         System.out.println("Albero vuoto" + e);
       }
    return cont;  }
    Grazie.

  2. #2
    codice:
    public int contaBiGenitori(BinaryNode node) {
        if(node == null)
            return 0;
    
        int cont=0;
        if(node.getLeftChild() != null && node.getRightChild() != null)
            cont += 1;  //Conta se stesso
    
        cont += contaBiGenitori(node.getLeftChild()); //Conta a sx
        cont += contaBiGenitori(node.getRightChild()); //Conta a dx
    
        return cont;
    }
    Dovrebbe funzionare, un consiglio: le eccezioni vanno usate solo per i casi eccezionali, mai per la logica del programma.
    Coltiva Linux, Windows si pianta da solo!

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    205
    Originariamente inviato da loHacker
    codice:
    public int contaBiGenitori(BinaryNode node) {
        if(node == null)
            return 0;
    
        int cont=0;
        if(node.getLeftChild() != null && node.getRightChild() != null)
            cont += 1;  //Conta se stesso
    
        cont += contaBiGenitori(node.getLeftChild()); //Conta a sx
        cont += contaBiGenitori(node.getRightChild()); //Conta a dx
    
        return cont;
    }
    Dovrebbe funzionare, un consiglio: le eccezioni vanno usate solo per i casi eccezionali, mai per la logica del programma.
    Funziona benissimo! grazie per il consiglio!

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2010
    Messaggi
    205

    [Java]alberi binari minValorefoglia

    Ciao,
    metodo che restituisce il valore minimo contenuto in una foglia
    codice:
    codice:
    public int minValoreFoglia(BinaryNode node) {
        	  int minimo=node.getDato();//inizializzo la variabile minimo 
        	
        	  if(node == null)
        	    return 0;
        	  	    
        	    if(node.getLeftChild() != null && node.getRightChild() != null) //  errore qua perchè visito l'albero solo per la parte di sx
        	    minimo = minValoreFoglia(node.getLeftChild());//???
        	    
        	    if(node.getLeftChild() != null && node.getRightChild() == null)
        	    minimo = minValoreFoglia(node.getLeftChild());
        	    
        	    if(node.getLeftChild() == null && node.getRightChild() != null)
        	    minimo = minValoreFoglia(node.getRightChild());
        	    
        	    if(node.getLeftChild() == null && node.getRightChild() == null && minimo>node.getDato())
        	    minimo = node.getDato();
        	    
        	    return minimo;}
    il mio problema è dove ho messo il commento! come scritto e come si può ben capire effettuo una visita dell'albero solo della parte di sx come posso risorverlo? è giusto inizializzare così come ho fatto la variabile minimo?

    Grazie

  5. #5
    se il metodo deve restituire il valore minimo tra le foglie basta raggiungere la prima foglia più a sinistra che incontri

    codice:
    public int minValoreFoglia(BinaryNode node) {
       if (node == null)
          return -1; // o un valore che per te non ha significato
       if(node.getLeftChild() != null)
          return minValoreFoglia(node.getLeftChild());
       else if(node.getRightChild() != null)
          return minValoreFoglia(node.getRightChild());
    
       return node.getDato();
    }

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.