2

我正在用 Java 实现一个 N-ary 树;每个节点可以有尽可能多的节点。当我尝试构建一棵树时,问题就来了。我有一个函数可以递归地创建一个特定高度的树,并根据节点列表分配子节点。当我调用该函数时,根节点不包含任何数据;一旦完成,它就会返回一个空值。我从未实现过 N-ary 树,所以我对实现有点确定,任何关于它的指针都会非常感激!

//Creates a tree 
void createTree(int height) throws InvalidMoveException,   
  Modified_Tree.InvalidMoveException {
    root = new ListNode();
    root = populateTree(moves.root,height,true,0);  
}

 //Function called by Create tree to populate the tree
 //It takes in a ListNode, an int height that determines the height of the tree, 
 //and a boolean, which is used
 //To know whether the node is a black piece/max or a white piece/min

 public ListNode populateTree(ListNode root, int height, boolean black, int score) 
  {

    ListNode node = root;
     List<ListNode> nodes = new List<ListNode>(10);

     //Sets the size of List in node to the int taken
              node.setChildNumber(nodes.size());

    //return if reached the pre-maximum height
    if(height == 1){

        for(int i = 0; i < nodes.size(); i++){

            //Add the child to the last node
            node.addChild(nodes.get(i));

        }

        return node;
    }

    else{

              for(int j =0; j < node.getChildNumber(); j++){
      node = populateTree(node.getChildAt(j),height-1,!black,score);

        }   
    }
    return node;
 }

非常感谢任何帮助!

4

1 回答 1

1

你的问题在这里:

List<ListNode> nodes = new List<ListNode>(10);

首先,我假设您的意思new ArrayList<ListNode>(10);List<T>. 其次,该论点10仅确保您10最初将拥有位置。这并不意味着您将在10 ListNode内部自动初始化实例nodes。然后你有:

    for(int i = 0; i < nodes.size(); i++){
        //Add the child to the last node
        node.addChild(nodes.get(i));
    }

此循环永远不会执行,因为nodes.size()它根本不包含任何节点,因此为零。所以你需要先用ListNode实例初始化你的列表。

于 2013-04-02T18:47:02.973 回答