Hai in teoria quattro modi di camminare l'albero da un nodo (DefaultMutableTreeNode
):
breadthFirstEnumeration
depthFirstEnumeration
preorderEnumeration
postorderEnumeration
ma in realtà la profondità prima è implementata come postorder.
JavaDoc è un po 'laconico sulle differenze su questi metodi. Sono venuto qui in cerca di una risposta, ma ho finito per fare il test stesso, con un codice che sembra:
TreeModel model = tree.getModel();
DefaultMutableTreeNode rootNode = (DefaultMutableTreeNode) model.getRoot();
// Just changing enumeration kind here
Enumeration<DefaultMutableTreeNode> en = rootNode.preorderEnumeration();
while (en.hasMoreElements())
{
DefaultMutableTreeNode node = en.nextElement();
TreeNode[] path = node.getPath();
System.out.println((node.isLeaf() ? " - " : "+ ") + path[path.length - 1]);
}
avrei potuto raffinato con rientro proporzionale al livello, ma era solo un rapido hack.
Quindi, quali sono le differenze?
preorderEnumeration
= dalla cima dell'albero verso il basso, come se si stesse usando la freccia verso il basso per camminare
postorderEnumeration
= depthFirstEnumeration
= primo elencare le più profonde foglie del primo percorso, allora il loro genitore, quindi il più profondo foglie del secondo percorso, ecc.
breadthFirstEnumeration
= elencare gli elementi al primo livello, gli elementi al secondo livello, e così via
Per essere più concreti:
+ Root
+ Folder 1
- Leaf F1
- Leaf F1
+ Folder 2
+ Sub-folder 1
- Leaf SF1
- Leaf SF1
+ Sub-folder 2
- Leaf SF2
- Leaf SF2
♦ Preorder: come indicato sopra
♦ DepthFirst/Postorder:
Leaf F1, Leaf F1, Folder 1
Leaf SF1, Leaf SF1, Sottocartella 1
Leaf SF 2, Leaf SF2, Sottocartella 2 , Cartella 2, Radice
♦ BreathFirst:
Root
Cartella 1, Cartella 2
Foglia F1, Foglia F1, Sotto-cartella 1, Sotto-cartella 2
Foglia SF 1, Foglia SF 1, Foglia SF 2 , Leaf SF 2
Cosa intendi analizzando? Tipicamente si dovrebbe analizzare un'espressione per costruire una rappresentazione interna (come la struttura ad albero che si ha già). Vuoi semplicemente attraversare l'albero? – Adamski
Scusate per quello. Sì, intendevo attraversarlo. – fixxxer