Forum Informatica Unict

LAUREA TRIENNALE (D.M. 270/04) => Programmazione 2, 9 CFU => Topic started by: Gpeppe69 on 08-11-2012, 19:51:47



Title: compito alpha
Post by: Gpeppe69 on 08-11-2012, 19:51:47
Ragazzi mi sapete dire di preciso cosa vuole fatto il compito alpha ?? un albero di liste oppure una lista che contiene ogni nodo dell'albero ????    .penso


Title: Re:compito alpha
Post by: Ocelot92 on 12-11-2012, 09:08:34
Hai il testo?


Title: Re:compito alpha
Post by: Gpeppe69 on 12-11-2012, 12:54:08
Compito Alpha

Scrivere un metodo Java che:

- Sia Ricorsivo;

- Attraversi in modo Inorder  un albero binario di ricerca;

- Costruisca al suo interno una lista concatenata semplice;

- Etichetti ciascun nodo di detta lista con l'etichetta di ciascun nodo dell'albero e col livello di quest'ultimo;
- Non utilizzare inserimento ordinato in lista;

- Restituisca della lista ordinata in maniera crescente, secondo l'ordinamento delle etichette dell'albero.


Title: Re:compito alpha
Post by: Ocelot92 on 13-11-2012, 18:25:08
Nessuno dei due. Ti chiede un metodo che attraversa un albero secondo quei requisiti e mentre lo attraversa questo METODO crei una lista concatenata semplice che rispetti la consegna. Hai un albero e devi creare una lista.


Title: Re:compito alpha
Post by: Gpeppe69 on 13-11-2012, 19:04:14
grazie ma il metodo ricorsivo qual'è ????


Title: Re:compito alpha
Post by: ɹǝǝuıƃuǝsɹǝʌǝɹ on 13-11-2012, 19:07:50
Se non ti è data la possibilità di creare un secondo metodo non ricorsivo che sappia richiamare il primo (ricorsivo) con opportuni parametri, allora risulta evidente che il metodo (unico) ricorsivo, che dovrai creare tu, dovrà accettare un puntatore a nodo fra i suoi argomenti, e tale nodo rappresenterà la radice di un sotto-albero dell'albero originale a cui applicare il metodo di volta in volta... .smile


Title: Re:compito alpha
Post by: Gpeppe69 on 13-11-2012, 19:16:06
quindi devo fare l'inoder ricorsivo di un albero binario e devo caricare ogni elemento in un lista secondo l'inorder, tutto in un solo metodo o sbaglio ??? comunque non possiamo usare altri metodi  .camberman


Title: Re:compito alpha
Post by: Ocelot92 on 14-11-2012, 11:30:26
Tutto in un solo metodo, esatto. Quindi quello ricorsivo è l'unico metodo che devi scrivere...


Title: Re:compito alpha
Post by: Cerberus on 14-11-2012, 17:59:20
Provo a risponderti io in modo piu eusastivo possibile..

Code:
public void inorder(BSTNodo p,int liv,Lista l) {
if (p!= null) {
    inorder(p.left,liv+1,l);
l.insertTailLevel(p.key,liv);
    inorder(p.right,liv+1,l);
}
}

Il testo sembra complesso, ma l'esercizio non è altro che questo piccolo metodo. Come ben saprai attraversando l'albero in inOrder gli elementi (int in questo caso) risulterano gia ordinati in maniera crescente. Quindi basta inserire ogni volta in coda l'elemento (se inseriresti in testa sarebbe una lista DECRESCENTE invece)


Title: Re:compito alpha
Post by: Gpeppe69 on 14-11-2012, 18:08:20
grazie per l'intervento ma già ho fatto tutto proprio come hai scritto tu, avevo già capito come fare ma mi sentivo insicuro  .wink grazie mille


Title: Re:compito alpha
Post by: leovinci on 15-11-2012, 10:40:57
Cerberus non ho capito come implementare il metodo l.insertTailLevel() e cosa poi dobbiamo mettere nel main quando chiamo il metodo albero.inorder() dato che poi mi chiede 3 parametri che sono un nodo che è il nodo dell'albero di imput, e poi un intero e una lista, cosa mettiamo?
grazie 


Title: Re:compito alpha
Post by: Gpeppe69 on 15-11-2012, 11:59:17
dal main quando chiami l'inorder, se ad asempio hai classe albero a=new albero() dal main chiami a.inorder(a.root);

così passi la radice al metodo  .wink per quanto riguarda la lista io non ho fatto così,ho implementato la lista che è sempre dentro la classe albero però come variabile d'istanza ho dichiarato protected List l=new List(); ovviamente tutto dentro la classe albero, quindi dentro l'inorder richiamo l.metodo()...... e passo i valori dentro la lista 


cpt ????