Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68

    [Java] Eliminare foglie pari in un albero

    Ciao a tutti, ho creato un metodo che mi elimina le foglie che hanno il dato pari e questo metodo deve ritornare un int che indica quante foglie ho eliminato. Ho 2 problemi: il valore di ritorno è sempre 1 e mi cancella sempre e solo una foglia.. Ecco il mio codice:


    codice:
    //CLASSE BINARY TREE
    public int eliminaFogliePari () {
    	if (root == null)
    		throw new RuntimeException ("Albero vuoto");
    	else
    		return root.eliminaFogliePari();
    	
    }
    
    
    
    
    
    //CLASSE BINARY NODE
    public int eliminaFogliePari () {
    	int risp = 0;
    	if (left != null && right != null)
    		return risp += left.eliminaFogliePari() + right.eliminaFogliePari();
    	if (left != null && left.isALeaf() && left.dato%2 == 0) {
    		left = null;
    		risp++;
    		return risp;
    	}
    	if (right != null && right.isALeaf() && right.dato%2 == 0) {
    		right = null;
    		risp++;
    		return risp;
    	}
    	return risp;
    }

    EDIT: scusa ma di oggi sono un po' cotto..

  2. #2
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    codice:
    if (this == null)

  3. #3
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Prova con questo codice:

    codice:
    //CLASSE BINARY NODE
    public int eliminaFogliePari()
    {
      int risp = 0;
    
      if (left != null)
      {
        if (left.isALeaf())
        {
          if (left.dato % 2 == 0)
          {
            left = null;
            risp++;
          }
        }
        else
        {
          risp += left.eliminaFogliePari();
        }
      }
    
      if (right != null)
      {
        if (right.isALeaf())
        {
          if (right.dato % 2 == 0)
          {
            right = null;
            risp++;
          }
        }
        else
        {
          risp += right.eliminaFogliePari();
        }
      }
    
      return risp;
    }
    Sarebbe meglio, però, che dato fosse dichiarato "private" e che fosse acceduto tramite un metodo getDato()...
    Altra cosa, fai attenzione al caso particolare in cui l'albero è composto dal solo nodo radice, avente dato pari: la variabile "root" potrebbe dover essere settata a "null"...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    68
    Grazie funziona alla perfezione!!

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.