在递归方法中保持标记节点的计数

时间:2015-11-25 01:31:08

标签: java recursion counter

我有一个遍历二叉搜索树的递归方法。每次访问具有键属性的节点时,它都会接受该节点并将其插入到新的BST中。我的问题是我需要计算有多少节点有关键元素。我很难用递归方法做这件事。有谁知道如何在递归方法中实现“计数器”。我也在下面发布了我的代码。

public BookBST TraverseInOrder_Pblshr(Node localRoot, String key, BookBST B){
    if (localRoot!=null){

        TraverseInOrder_Pblshr(localRoot.leftChild, key, B);

        if(localRoot.B1.GetPublisher().equals(key)){            // if node matches key
            B.insert(localRoot.B1,3);                       // insert into BST (using publisher to order)
            //System.out.println(localRoot.B1.GetPublisher()+ "    this is item has been inserted into subtree");
            //System.out.println(localRoot.B1.GetTitle());
        }

        TraverseInOrder_PubYr(localRoot.rightChild, key, B);
    };
    return B;
}

1 个答案:

答案 0 :(得分:1)

  

有谁知道如何实施"计数器"在递归方法中。

是。如果递归方法为void,则只需添加count类型的参数int并生成返回类型int。要递增计数器,只需执行count++;。当递归调用该方法时,只需执行

count = recursiveMethod(count);

在您的情况下,该方法不是void,这使得它稍微困难一些。一个技巧是添加int[]类型的额外参数。但是,我建议使用私有帮助器方法。不要用这个额外的参数暴露这个可怕的签名。

public BookBST TraverseInOrder_Pblshr(Node localRoot, String key, BookBST B){
    return helper(Node localRoot, String key, BookBST B, new int[1]);
}

private BookBST helper(Node localRoot, String key, BookBST B, int[] counter) {
    // You should call **this** method recursiviely, not TraverseInOrder_Pblshr. E.g.
    // helper(localRoot.leftChild, key, B, counter);
    // To increment the counter, just do counter[0]++;
}