我有一个遍历二叉搜索树的递归方法。每次访问具有键属性的节点时,它都会接受该节点并将其插入到新的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;
}
答案 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]++;
}