1) siOriginariamente 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.
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:
...poi qlc sul TreeSLL...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; } }
...spero vi possa aiutare!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(); }
Grazie

Rispondi quotando