2014-03-18 52 views
0

我为自己写了一个快速树和节点类(没有太花哨,不需要太多)。 我有一个可变数量的下一级节点,我为这些使用了一个ArrayList。 它的工作原理应该是这样的,唯一的问题是toString()方法。 例如:我设置了一堆数字。显示树中每片树叶的整个路径

  • 0是根
  • 0有孩子1,2,3
  • 2有儿童2.4和2.5

现在,当我打印出来的树,这就是我得到: (斜线应该是有)

  • /0/1
  • /2/2.5
  • /2.4
  • /3

什么,但是我想是这样的:

  • /0/1
  • /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; 
} 

难道有人请告诉我,为了每次从根部走路,我必须改变什么?谢谢!

+0

欢迎您! http://en.wikipedia.org/wiki/Tree_traversal可以帮助你吗? –

回答

1

多少路径是在大约三?有许多叶子的路径 - 因为你的代码不起作用。 您编写的代码只能遍历所有节点。 但是你想打印从根到树叶的所有路径。

一个解决方案是使用递归: 它从每个子项的根目录和打印路径开始。 它看起来像对打印幅面我命名printPaths这个

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); 
    } 
} 

方法 - 它有两个参数:杉杉是节点nodeOnPath和第二个是节点nodeOnPath从根路径。 在方法的第一行,它创建了nodePath。 然后检查节点是否为叶 - 如果答案为是,则打印nodePath并退出该方法。

如果节点不是叶子,则获取该节点的所有子节点,遍历它们并为每个节点生成路径。这部分用于每个循环。

要打印的所有路径,你会调用方法printPaths像计算器这样

printPaths(rootNode, ""); 
0

你需要getNodeContent()添加到每个孩子的路,这里是一个解决方案:

public String toString() { 
     String all = "" 
     for (Node<T> node : nextNodes) { 
      all += this.getNodeContent().toString() + node.toString(); 
      if (node.isLeaf()) { 
       all += "\n"; 
      } 
     } 
     return "/" + + all; 
    }