PDA

View Full Version : [Java] Esercizio..urgente!


alebertaz
25-06-2006, 22:11
Salve, qualcuno di voi sà come posso risolvere quest'esercizio in java relativo agli alberi binari???

http://img233.imageshack.us/img233/1325/essss1gq.jpg

Queste sono le varie classi (un grazie davvero x chi mi può aiutare :rolleyes: ):

****************************** classe BTNode.java ****************************
package BinTrees;
class BTNode {
Object key; // valore associato al nodo
BTNode parent; // padre del nodo
BTNode left; // figlio sinistro del nodo
BTNode right; // figlio destro del nodo
// post: ritorna un albero di un solo nodo, con valore value e sottoalberi
// sinistro e destro vuoti
BTNode(Object ob) {
key = ob;
parent = left = right = null;
}
// post: ritorna un albero contenente value e i sottoalberi specificati
BTNode(Object ob,
BTNode left,
BTNode right,
BTNode parent) {
key = ob;
this.parent = parent;
setLeft(left);
setRight(right);
}
....
....
}
****************************** classe BinaryTree.java ****************************
package BinTrees;
import java.util.Iterator;
import Queues.*;
public class BinaryTree implements BT {
private BTNode root; // la radice dell’albero
private BTNode cursor; // puntatore al nodo corrente
private int count; // numero nodi dell’albero
// post: crea un albero binario vuoto
public BinaryTree() {
root = null;
cursor = null;
count = 0;
}
....
....
}
****************************** classe QueueCollegata.java ****************************
package Queues;
public class QueueCollegata implements Queue {
private QueueRecord head; // puntatore al primo elemento in coda
private QueueRecord tail; // puntatore all’ultimo elemento della coda
private int count; // numero di elementi in coda
// post: costruisce una coda vuota
public QueueCollegata() {
head = null;
tail = null;
count = 0;
}
// post: ritorna il numero di elementi nella coda
public int size() {...}
// post: ritorna true sse la coda e’ vuota
public boolean isEmpty() {...}
// post: svuota la coda
public void clear() {...}
// pre: coda non vuota
// post: ritorna il valore del primo elemento della coda
public Object front() {...}
// pre: value non nullo
// post: inserisce value in coda
public void enqueue(Object ob) {...}
// pre: coda non vuota
// post: ritorna e rimuove l’elemento il primo elemento in coda
public Object dequeue() {...}
}

sottovento
26-06-2006, 05:55
Le visite da fare sono due:
- la prima ritorna il numero di nodi dell'albero passato in ingresso (compreso il nodo radice);
- la seconda effettua una visita dell'albero e pone nella code il nome del nodo ed il numero di nodi calcolato con il metodo definito prima.

Se hai problemi, pubblico una traccia. Please, quando posti il codice, usa l'apposito tag, cosi' si mantengono le indentazione ed e' tutto piu' facile da leggere

High Flying
Sottovento

alebertaz
26-06-2006, 09:16
Le visite da fare sono due:
- la prima ritorna il numero di nodi dell'albero passato in ingresso (compreso il nodo radice);
- la seconda effettua una visita dell'albero e pone nella code il nome del nodo ed il numero di nodi calcolato con il metodo definito prima.

Se hai problemi, pubblico una traccia. Please, quando posti il codice, usa l'apposito tag, cosi' si mantengono le indentazione ed e' tutto piu' facile da leggere

High Flying
Sottovento

Grazie per l'aiuto! :)
Si, se ti è possibile pubblicare una traccia, così capisco meglio come funziona la ricorsione sul metodo sottoalberi().
Sorry per il codice senza indentazione ma è la prima volta che posto in questa sezione...
grazie ancora

alebertaz
26-06-2006, 09:56
Questa soluzione è giusta? (Il metodo che ritorna il numero di nodi non l'ho implementato ma volevo sapere se il resto è ok...)

public void PostOrderBuild (BTNode n) {
if (n!=NULL) {
PostOrderBuild(n.left);
PostOrderBuild(n.right);
q.enqueue("n.key + valore ritornato dal metodo che ritorna il numero di nodi");
}
}

public QueueCollegata sottoalberi() {
QueueCollegata q=new QueueCollegata();
if (root!=NULL)
PostOrderBuild(root);
return q;
else return NULL;
}