有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个递归方法,可以遍历二叉搜索树。每次它访问一个具有关键属性的节点时,它都会将该节点插入一个新的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) 个答案

  1. # 1 楼答案

    Does anyone know how to implement a "counter" in a recursive method.

    对。如果递归方法是void,只需添加类型为int的参数count,并使返回类型为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]++;
    }