我自己写了一个快速的Tree和Node类(没有太花哨的,不需要做太多)。我有一个可变数量的下一级节点,我用数组列表来存储它们。它像预期的那样工作,唯一的问题是toString()方法。例子:我用一堆数字建立了它。
- 0是根
- 0有子节点1、2、3
- 2有子女2.4和2.5
现在,当我打印出树,这是我得到的:(斜杠应该在那里)
- <
- /0/1/gh>
- /2/2.5 2.4
- /
- /3
我想要的是:
- <
- /0/1/gh>
- /0/2/2.5
- /0/2/2.4
- /0/3
这是我的toString():
public String toString() {
String all = "";
for (Node<T> node : nextNodes) {
all += node.toString();
if (node.isLeaf()) {
all += "n";
}
}
return "/" + this.getNodeContent().toString() + all;
}
谁能告诉我,为了每次都从根目录走,我需要做什么改变?谢谢!
在一些3中有多少条路径?路径和叶子一样多,因为你的代码不工作。您编写的代码只遍历所有节点。但是你想打印从根到叶的所有路径。
一个解决方案是使用递归:它从根开始,并为每个子节点打印路径。它看起来像这样
public void printPaths(Node<T> nodeOnPath, String onPath){
String nodePath = onPath + "/" + nodeOnPath.getNodeContent().toString();
if (nodeOnPath.isLeaf()){
System.out.println(nodePath);
return;
}
ArrayList<Node> children = nodeOnPath.getChildren();
for (Node<T> node : children){
printPaths(node, nodePath);
}
}
打印路径的方法,我命名为printPaths -它有两个参数:第一个是节点nodeOnPath,第二个是从根到节点nodeOnPath的路径。在方法的第一行,它创建了nodePath。然后检查节点是否为叶子——如果答案是肯定的,那么打印nodePath并退出方法。
如果节点不是叶节点,则获取该节点的所有子节点,遍历它们并为每个节点生成路径。这部分是在每个循环。
要打印所有路径,你将像这样调用printPaths方法
printPaths(rootNode, "");
您需要为每个子路径添加getNodeContent(),这是一个解决方案:
public String toString() {
String all = ""
for (Node<T> node : nextNodes) {
all += this.getNodeContent().toString() + node.toString();
if (node.isLeaf()) {
all += "n";
}
}
return "/" + + all;
}