gpt4 book ai didi

java - 由 DefaultMutableTreeNode 制作的遍历树

转载 作者:太空狗 更新时间:2023-10-29 22:37:53 24 4
gpt4 key购买 nike

我们使用 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]);
}

我本可以使用与级别成比例的缩进进行优化,但这只是一个快速的 hack。

那么,有什么区别呢?

  • 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
Leaf SF1,Leaf SF1,子文件夹 1
Leaf SF 2,Leaf SF2,子文件夹 2,文件夹 2,根目录
♦ 呼吸第一:

文件夹 1、文件夹 2
Leaf F1, Leaf F1, 子文件夹1, 子文件夹2
叶 SF 1,叶 SF 1,叶 SF 2,叶 SF 2

关于java - 由 DefaultMutableTreeNode 制作的遍历树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1470857/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com