Pages: 1 2 [3]   Go Down
Print
Author Topic: Codice alberi n-ari  (Read 8271 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
icemouse_ej
Guest
« Reply #30 on: 06-07-2009, 00:47:08 »

una domanda...
viste le 2 implementazioni degli alberi n-ari,
1) primo figlio -> fratello
2) lista di figli.

secondo voi qual'è la migliore?
pro & contro!!?
perchè scegliere la prima alla seconda e viceversa!?

ciao a tutti

A mio parere ?
La seconda è ottima, secondo me, anche se ti costringe all'implementazione di una lista e quindi di tutto ciò che serve a gestirla e quindi codice in più.
La prima è buona da gestire ricorsivamente e forse è anche la migliore dal punto di vista didattico ( e inoltre il professore la preferisce e il suo parere vale 10 volte il mio ).
grazie mille per il tuo parere!! ok
 
Logged
vincenzo86
Forumista
***
Offline Offline

Gender: Male
Posts: 505



« Reply #31 on: 03-09-2009, 18:00:03 »

Nel codice postato dal professore, sui suoi documenti, il metodo insert, contiene un errore:
Code:
public void insert(String x){
root = insert(root, x);
}
private NTNode insert(NTNode p, String x){
if (p == null)
return insertPath(x);
if (x.length() == 0)
return p; // elemento già presente
else
if(p.info == x.charAt(0))
p.primofiglio = insert(p.primofiglio, x.substring(1));
else
p.fratello = insert(p.fratello,x);
}
private NTNode insertPath(String x){
if(x.length() == 0)
return null;
else
return new NTnode(x.charAt(0),insertPath(x.substring(1)));
}

Alla riga di codice
Code:
if(p.info==x.charAt(0))
Viene riscontrato un errore:
Quote
Ntree.java:51: incomparable types: java.lang.Object and char
      if(p.info==x.charAt(0))
Questo perchè l'informazione è un'oggetto, mentre il charAt è applicabile solo a caratteri..
Il mio dubbio è questo: come mai il professore nelle slide ha messo questa riga di codice errata, dato che la struttura albero n-ario postata lavora con dati di tipo oggetti? Grazie
Logged
vincenzo86
Forumista
***
Offline Offline

Gender: Male
Posts: 505



« Reply #32 on: 07-12-2009, 11:13:47 »

Posto il mio codice d'esempio sugli alberi NAri :
Code:
/*Implementazione dinamica Ntree
 *Classe NTNodo*/


public class NTNodo
{
protected Object info;
protected NTNodo primoFiglio,primoFratello;

public NTNodo()
{
this(null,null,null);
}
public NTNodo(Object info,NTNodo primoFiglio,NTNodo primoFratello)
{
this.info=info;
this.primoFiglio=primoFiglio;
this.primoFratello=primoFratello;
}
public NTNodo(Object info)
{
this(info,null,null);
}
public NTNodo(Object info,NTNodo f)
{
this(info,f,null);
}
public void setInfo(Object info)
{
this.info=info;
}
public Object getInfo()
{
return info;
}
public void visit()
{
System.out.println(" "+this.getInfo());
}
}

Code:
public class NTree
{
private NTNodo root;
private boolean inserted=true;

//Costruttore
public NTree()
{
root=null;
}
public void setRoot(NTNodo root)
{
this.root=root;
}
public NTNodo getRoot()
{
return root;
}
protected void preorder(NTNodo p)
{
if(p!=null)
{
p.visit();
NTNodo t=p.primoFiglio;
while(t!=null)
{
preorder(t);
t=t.primoFratello;
}
}
}
protected void postorder(NTNodo p)
{
if(p!=null)
{
NTNodo t=p.primoFiglio;
while(t!=null)
{
postorder(t);
t=t.primoFratello;
}
p.visit();
}
}
protected void inorder(NTNodo p)
{
if(p!=null)
{
NTNodo t=p.primoFiglio;
while(t!=null)
{
inorder(t);
p.visit();
t=t.primoFratello;
}
}
}
//Inserimento ricorsivo
public void insert(String x)
{
root=insert(root,x);
}
private NTNodo insert(NTNodo p,String x)
{
if(p==null)
return insertPath(x);
if(x.length()==0)
return p; //Elemento già presente
else
if(p.info.equals(x.charAt(0)))
p.primoFiglio=insert(p.primoFiglio,x.substring(1));
else
p.primoFratello=insert(p.primoFratello,x);
return p;
}
private NTNodo insertPath(String x)
{
if(x.length()==0)
return null;
else
return new NTNodo(x.charAt(0),insertPath(x.substring(1)));
}

Code:
/*Main*/
public class testNAri
{
public static void main (String args[])
{
NTree albero=new NTree();
albero.insert("Vincenzo");
albero.insert("Otranto");
albero.insert("Pippo");
albero.postorder(albero.getRoot());
}
}


Appena faccio partire l'esecuzione, il test mi da soltanto il primo inserimento, però gli altri due inserimenti non me li fa. Cosa può essere? Grazie.
Logged
Pages: 1 2 [3]   Go Up
Print
Jump to: