调用另一个类时递归不起作用

时间:2019-05-23 22:39:21

标签: java

我写了一个递归方法,该方法搜索BST,将参数与节点中的string属性进行比较,如果字符串匹配,则从该节点返回int属性。该方法在其自己的类中调用时有效,但是,当我在另一个类中调用该方法时,该方法不再起作用。因此,基本上,该方法的private部分有效,只是public部分使我感到困惑。

public int boka(String ime) {
    int bobo=boka(this.root,ime);
    return bobo;
}

private int boka(Node curr_root,String ime){
    if(curr_root==null){
        return -1;
    }

    boka(curr_root.left,ime);
    if(curr_root.info.ime.equalsIgnoreCase(ime)) {
        return curr_root.info.pobjede;
    }
    boka(curr_root.right,ime);
    return -1;
}

基本上,private部分是有效的,但是,当我使用public在另一个类中调用递归时,它总是返回-1

在另一堂课中,我正在这样做:

public static void main(String[] args) {

    // TODO Auto-generated method stub
    BinTree bt = new BinTree();

    int a = bt.boka("Djole");

我省略了实际的Node制作和插入操作,因为我认为这无关紧要。

2 个答案:

答案 0 :(得分:1)

您的搜索将始终返回-1,因为您没有正确实现搜索。我不知道为什么在“它自己的类”中运行它时它会起作用,但是您需要返回递归调用的值。否则,您将在递归完成后返回-1

您可以对此进行调整,然后使其生效:

private int boka(Node curr_root,String ime){

    if(curr_root.left != null) return boka(curr_root.left,ime);

    if(curr_root.info.ime.equalsIgnoreCase(ime)) return curr_root.info.pobjede;

    if(curr_root.right != null) return boka(curr_root.right,ime);

    return -1;
}

答案 1 :(得分:0)

看起来好像不是在二叉搜索树中搜索(或者BST意味着什么?),它更像是对任意二叉树的有序遍历。

您可以使其正常运行,只是不要忽略递归中的返回值:

private int boka(Node curr_root,String ime){
  if(curr_root==null) {
    return -1;
  }

  int ret=boka(curr_root.left,ime);
  if(ret!=-1) {
    return ret
  }

  if(curr_root.info.ime.equalsIgnoreCase(ime)) {
    return curr_root.info.pobjede;
  }

  return boka(curr_root.right,ime);
}