显示树中每一片叶子的整个路径



我自己写了一个快速的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;
    }

相关内容

  • 没有找到相关文章

最新更新