相当新的Java,我试图在递归函数中构建一个树。我将首先发布代码:
public static void buildpreorder(TreeNode node, int layer){
if (layer == stops){
return;
}
else{
int n=0;
// for loop in order to iterate through visited[] array
for(int i=0; i<stops;i++){
if (node.visited[i]==true){ // Checks if node was already visited
node.children[n]= new TreeNode(Ziele[i+1], layer, stops, count, node.visited, node);
node.visited[i]=false;
}
count++;
buildpreorder(node.children[n], layer+1);
n++;
}
}
return;
}
}
所以我尝试传递visited []数组,以便较低的节点知道必须创建哪些节点。这样可以正常工作,直到第一次返回递归为止。然后访问数组保持完全错误。即使我将被访问的[]保存在节点的类中,它也不起作用。
哦,TreeNode代码在这里,可能比它更清楚:
public TreeNode(String destination, int layer, int max, int count, boolean[] tovisit, TreeNode parent){
this.destination=destination;
this.layer=layer;
this.count=count;
this.parent=parent;
if (max-layer == 0){
this.children= new TreeNode[1];
}
else{
this.children= new TreeNode[max-layer];
}
this.visited= new boolean[max]; //visited[] gets copied from parent node
for (int i=0; i< max; i++){
this.visited[i]=tovisit[i];
}
}
想要的树是一个对称的&#34;树(不知道该怎么称呼它)。在第一层中是一个具有6个节点的根,在每个节点上有5个下一个节点。在5个节点中的每个节点上都是其他四个节点,依此类推......
0 Start
. . .
. . .
. . .
1 A B C
. . . . . .
. . . . . .
2 B C A C A B
. . . . . .
. . . . . .
3 C B C A B A
访问数组应该跟踪该分支的状态。在添加的示例中,在第二层{0,0,1}中的第一个B处的被访问阵列。因此,下次创建节点时,它知道要去哪里。问题是访问数组在每个函数中都不守恒。因此,当方法返回时,旧的visited []未命中。在该方法接触到第一个叶子(第一个C,第三个层)之后,该方法再次使用visited [] = {0,0,0}
再次到达顶部感谢任何帮助:)