Originariamente inviato da unomichisiada
1)Devi riprodurre la struttura del tuo albero in modo identico sul Jtree?
2)Devi visitarlo per forza per livelli l'albero?
3)Posta un po di documentazione sui metodi per navigare questi TreeSSL che non li conosco.
1) si
2) no, ma mi sembrava il modo più semplice x convertirlo.
3) non esiste documentazione...è una classe creata...posto un pò di metodi x capirne il funzionamento.
Questa è la classe che descrive il nodo, nel post precedente è identificata da Trees.TreeNode per differenziarli da i javax.swing....TreeNode:
codice:
public class TreeNode {
String key;
public SL_List childList;
TreeNode parent;
/** Creates a new instance of TreeNode */
public TreeNode(TreeNode parent, String ob) {
key = ob;
this.parent = parent;
childList = new SL_List();
}
public String getValue(){
return this.key;}
public void setValue(String ob){
this.key=ob;}
void addChild(String ob){
childList.addLast(new TreeNode(this, ob));
}
TreeNode getChild(int childIndex){
return (TreeNode) childList.getAtIndex(childIndex);
}
boolean removeChild (TreeNode tr){
if (childList.remove(tr)){
tr.parent = null;
tr.childList = null;
return true;
}
else
return false;
}
static int size(TreeNode tr){
if (tr == null)
return 0;
else {
int i = 1;
Iterator iter = tr.childList.iterator();
while (iter.hasNext())
i = i + size((TreeNode)iter.next());
return i;
}
}
...poi qlc sul TreeSLL...
codice:
public class TreeSLL {
public TreeNode root; // radice dell'albero private int count;
private int count; // numero di nodi dell'albero
public TreeNode cursor; // riferimento al nodo corrente
// post: costruisce un albero vuoto
public TreeSLL() {
clear() ;
}
// post: svuota l'albero
public void clear() {
root = cursor = null;
count = 0 ;
}
// post: ritorna il numero di nodi dell'albero public int size () { return count;}
// post: ritorna true se l'albero e' vuoto; false altrimenti
public boolean isEmpty() { return (count == 0);}
// pre: ob non nullo
// post: l'oggetto e' inserito come figlio del nodo corrente,
// o come radice se l'albero e' vuoto. Ritorna true.
public boolean insert (String ob) {
if (isEmpty())
cursor = root = new TreeNode(null, ob) ;
else
cursor.addChild(ob) ;
count++;
return true;
}
// pre: ob non nullo
// post: ritorna il riferimento al primo nodo con valore ob rispetto
// alla visita in profondita'
private TreeNode findPos(String ob, TreeNode n) {
TreeNode k;
if (n == null || n.key.equals(ob)) return n;
Iterator iter = n.childList.iterator();
while (iter.hasNext()) {
k = findPos(ob, (TreeNode)iter.next());
if (k != null && k.key.equals (ob) )
return k;
}
return null;
}
// post: cursor si sposta sulla radice
public void reset() { cursor = root;}
// post: se possibile cursor si sposta sul figlio in posizione
// childindex e ritorna true; altrimenti rimane dov'è' e
// ritorna false
public boolean moveDown (int childIndex) {
if (isEmpty() || childIndex <= 0 || childIndex > childCount())
return false; // posizione non valida
else { // posizione valida
cursor = cursor.getChild(childIndex-1);
return true;
}
}
// pre: parametri diversi da nuli
// post: appende a sb una stringa che rappresenta il sottoalbero con
// radice n secondo una visita Breadth First
private void BFformat(TreeNode n, StringBuffer sb) {
QueueList todo = new QueueList();
TreeNode tr = null;
todo.enqueue(n) ;
Iterator iter = n.childList.iterator();
while ( !todo.isEmpty()){
tr = (TreeNode)todo.dequeue();
sb.append(tr.key.toString() + ",");
iter = tr.childList.iterator();
while (iter.hasNext())
todo.enqueue(iter.next());
}
}
// post: ritorna una stringa che rappresenta l'albero
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("Tree: <") ;
if (root != null)
BFformat(root,sb) ;
sb.append ( ">") ;
return sb.toString();
}
...spero vi possa aiutare!
Grazie