Masz teoretycznie cztery sposoby chodzić drzewo z węzła (DefaultMutableTreeNode
):
breadthFirstEnumeration
depthFirstEnumeration
preorderEnumeration
postorderEnumeration
, ale w rzeczywistości pierwszy jest realizowany jako postorder.
JavaDoc jest nieco lakoniczny na temat różnic w tych metodach. Przybyłem tu w poszukiwaniu odpowiedzi, ale skończyło wykonując sprawdzić się z kodem patrząc jak:
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]);
}
mogłem rafinowany z wcięciem proporcjonalny do poziomu, ale to było tylko szybkie Hack.
Jakie są różnice?
preorderEnumeration
= od górnej części drzewa do dołu, jakbyś za pomocą strzałki w dół, aby chodzić
postorderEnumeration
= depthFirstEnumeration
= pierwsza lista najgłębsze listkami pierwszej ścieżce, wówczas ich rodziców, a najgłębsza liście drugiej ścieżki itp.
breadthFirstEnumeration
= Lista elementów na pierwszym poziomie, a następnie przez elementy na jego drugim poziomie, a więc na
Bardziej beton
+ Root
+ Folder 1
- Leaf F1
- Leaf F1
+ Folder 2
+ Sub-folder 1
- Leaf SF1
- Leaf SF1
+ Sub-folder 2
- Leaf SF2
- Leaf SF2
♦ Zamówienie wstępne: tak jak pokazano powyżej
♦ DepthFirst/Postorder:
Leaf F1, Leaf F1, Folder 1
Leaf SF1, Leaf SF1, Sub-folder 1
Leaf SF 2, Leaf SF2, Subfolder 2 , Katalog 2 Root
♦ BreathFirst:
głównej
katalogu 1, katalog 2
liści F1 liści F1 podfolderów jeden Sub-katalog 2
liści SF 1, liść SF 1, liść SF 2 , Leaf SF 2
Co masz na myśli, parsując go? Zazwyczaj parsujesz wyrażenie, aby zbudować reprezentację wewnętrzną (taką jak struktura drzewa, którą już posiadasz). Czy chcesz po prostu przejść przez drzewo? – Adamski
Przepraszam za to. Tak, miałem na myśli przemierzanie tego. – fixxxer