遍历由默认创建的树可变树节点
我们有一个使用Java中指定的树结构实现的树结构。DefaultMutableTreeNode
有没有办法遍历它,这是内置的?
如果没有,请建议其他技术。
我们有一个使用Java中指定的树结构实现的树结构。DefaultMutableTreeNode
有没有办法遍历它,这是内置的?
如果没有,请建议其他技术。
从理论上讲,您有四种方法可以从节点()遍历树:DefaultMutableTreeNode
breadthFirstEnumeration
depthFirstEnumeration
preorderEnumeration
postorderEnumeration
但实际上深度优先是作为后序实现的。
JavaDoc在这些方法的差异上有点简洁。我来这里寻找答案,但我以自己做测试结束,代码看起来像这样:
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]);
}
我本可以用与级别成比例的缩进进行改进,但这只是一个快速的黑客攻击。
那么,有什么区别呢?
preorderEnumeration
=从树的顶部到底部,就好像你用向下箭头走过它一样postorderEnumeration
= depthFirstEnumeration
=首先列出第一条路径中最深的叶子,然后是它们的父级,然后是第二条路径的最深的叶子,依此类推。breadthFirstEnumeration
= 列出第一级的元素,然后列出第二级的元素,依此类推更具体地说:
+ Root
+ Folder 1
- Leaf F1
- Leaf F1
+ Folder 2
+ Sub-folder 1
- Leaf SF1
- Leaf SF1
+ Sub-folder 2
- Leaf SF2
- Leaf SF2
♦ 预购:如上
♦所示 深度第一/后订:
叶 F1、叶 F1、文件夹 1
叶 SF1、叶 SF1、子文件夹 1
叶 SF 2、叶 SF2、子文件夹 2、文件夹 2、根
♦呼吸第一:
根
文件夹 1、文件夹 2
叶 F1、叶 F1、子文件夹 1、子文件夹 2
叶 SF 1、叶 SF 1、叶 SF 2、叶 SF 2
如果你的意思是你想遍历树,你可以调用或为了迭代树中的所有节点。breadthFirstEnumeration()
depthFirstEnumeration()
例:
DefaultMutableTreeNode root = ...
Enumeration en = root.depthFirstEnumeration();
while (en.hasMoreElements()) {
// Unfortunately the enumeration isn't genericised so we need to downcast
// when calling nextElement():
DefaultMutableTreeNode node = (DefaultMutableTreeNode) en.nextElement();
}