Alberi binari con array "standard"

« Older   Newer »
  Share  
france17
CAT_IMG Posted on 28/12/2012, 14:52     +1   -1




Ciao a tutti x scuola mi hanno dato questo esercizio:

CODICE
realizzare una classe per la gestione degli alberi binari basata sull'uso dei vettori "standard" (e non estensibili).
Implementare i seguenti metodi:
-Inserimento I° elemento;
-Inserimento II° elemento;
-Inserimento elemento generico;
-Lettura ordinata albero;


Sono riuscito a realizzare i primi 2 metodi (banali) ma non riesco a trovare l'algoritmo per l''inserimento generico e la lettura ordinata..qualcuno puo darmi una dritta?
 
Top
Doch88
CAT_IMG Posted on 28/12/2012, 17:19     +1   -1




Cosa non hai capito della terza e quarta richiesta?

Per i Generics leggiti questi:

http://docs.oracle.com/javase/tutorial/ext...rics/index.html

Quello che segue l'ho fatto adesso in 10 minuti (c'ho messo più tempo ad installare il jdk lol), per farti vedere meglio i generics su un albero binario semplice, vedi se riesci a capire. :)

CODICE
class elemento <T extends Object>
{
       private elemento right = null;
       private elemento left = null;
       private T obj;
       public elemento()
       {
       }
       public T getObj()
       {
               return obj;
       }
       public void setObj(T newObj)
       {
               obj = newObj;
       }
       public elemento getRight()
       {
               if(right != null)
                       return right;
               else
               {
                       right  = new elemento();
                       return right;
               }
                       
       }
       public elemento getLeft()
       {
               if(left != null)
                       return left;
               else
               {
                       left = new elemento();
                       return left;
               }
                       
       }
}

public class albero
{
       public static void main(String[] args)
       {
               elemento<Integer> nuovoAlbero = new elemento<Integer>();
               nuovoAlbero.setObj(1);
               nuovoAlbero.getRight().setObj(2);
               nuovoAlbero.getLeft().setObj(3);
               nuovoAlbero.getRight().getRight().setObj(4);
       }
}


Edited by Doch88 - 28/12/2012, 17:47
 
Top
france17
CAT_IMG Posted on 28/12/2012, 17:32     +1   -1




Non riesco a "trovare" l'algoritmo che mi permette di inserire un elemento generico in modo ordinato e anche la lettura ordinata..questo è il pezzo di codice della classe che ho scritto:
CODICE
/**
* @(#)Albero.java
*
*
* @author
* @version 1.00 2012/12/28
*/

public class Albero {
       public String alb[] = new String[1000];
   /**
    *Costruttore senza parametri
    */
   public Albero() {
           int i;
           for (i=0;i<1000;i++) alb[i]="";        
   }
   /**
    * addPrE inserisce primo elemento
    * @param e elemento da inserire
    */
   public void addPrE(String e){
           this.alb[0]=e;
   }
   /**
    * addSecE inserisce il secondo elemento
    * @param e elemento da inserire
    */
   public void addSecE(String e){
           if(this.alb[0].compareTo(e)>0) this.alb[1]=e;
           if(this.alb[0].compareTo(e)<0) this.alb[2]=e;
   }
   /**
    * addGenElem inserisce elemento generico
    * @param e elemento da inserire
    */
   public void addGenElem(String e){
           
   }
}
 
Top
Doch88
CAT_IMG Posted on 28/12/2012, 17:45     +1   -1




Sinceramente questo è un po' strano e macchinoso come albero, di solito è più semplice come l'ho fatto io, ma se te l'ha chiesto così allora va bene.

Non ho ben capito cosa intendi con elemento generico, non i Generics se ho compreso bene. E poi come lo dovresti ordinare?
 
Top
france17
CAT_IMG Posted on 28/12/2012, 17:49     +1   -1




generico intendo un qualsiasi elemento. Questo elemento deve essere inserito in modo ordinato: cioe se ho l'albero che contiene "CASA" come radice e "CIAO" come primo elemento e inserisco "ALBERO" deve andare in posizione 2 perche è minore sia di "CIAO" che di "CASA"..mi scuso per la cattiva spiegazione ma ci ho capito gran poco pure io..
 
Top
Doch88
CAT_IMG Posted on 28/12/2012, 18:31     +1   -1




Non ne sono sicuro, dato che non ho mai provato a fare alberi con gli array, ma questo dovrebbe andare bene per l'inserimento di un qualsiasi altro elemento:

CODICE
public void addGenElem(String e){
       int i;
       for(i= 0;i<1000;i++)
       {
               if(this.alb[i].equals("") == false)
               {
                       if(this.alb[i].compareTo(e)>0) i= 1 + i * 2;
                       if(this.alb[i].compareTo(e)<0) i= 2 + i * 2;
               }
               else
               {
                       this.alb[i] = e;
                       break;
               }
       }
  }


Per la lettura in modo ordinato penso basti una semplice lettura in un ciclo for che, da quello che ho capito, è già stato ordinato all'inserimento.
Scusami ma sto in vacanza fuori casa, questo è stato il mio unico momento di noia e attualmente non sono molto sveglio. asd

Edited by Doch88 - 28/12/2012, 18:53
 
Top
france17
CAT_IMG Posted on 28/12/2012, 19:53     +1   -1




CITAZIONE (Doch88 @ 28/12/2012, 18:31) 
Non ne sono sicuro, dato che non ho mai provato a fare alberi con gli array, ma questo dovrebbe andare bene per l'inserimento di un qualsiasi altro elemento:

CODICE
public void addGenElem(String e){
       int i;
       for(i= 0;i<1000;i++)
       {
               if(this.alb[i].equals("") == false)
               {
                       if(this.alb[i].compareTo(e)>0) i= 1 + i * 2;
                       if(this.alb[i].compareTo(e)<0) i= 2 + i * 2;
               }
               else
               {
                       this.alb[i] = e;
                       break;
               }
       }
  }


Per la lettura in modo ordinato penso basti una semplice lettura in un ciclo for che, da quello che ho capito, è già stato ordinato all'inserimento.
Scusami ma sto in vacanza fuori casa, questo è stato il mio unico momento di noia e attualmente non sono molto sveglio. asd

ti ringrazio per l'aiuto. appena ho l'occasione (sono fuori casa) provo il codice..grazie mille ancora :)
 
Top
6 replies since 28/12/2012, 14:52   227 views
  Share