我正在努力与这个递归建筑树

时间:2016-07-12 22:04:57

标签: java recursion tree

相当新的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}

再次到达顶部

感谢任何帮助:)

0 个答案:

没有答案