为什么此方法总是返回-1

时间:2018-11-25 14:23:53

标签: java if-statement recursion return return-value

  private int deleter(BSTNode node, int key) {
    if(node.key==key){
        if(node.right==null && node.left==null){
            node=null;
            return 0;
        }
    }
    else if(key<node.key){
        node=node.left;
        deleter(node,key);

    }
    else {
        node=node.right;
        deleter(node,key);
    }


    return -1;
}

为什么这个方法总是返回-1,当找到确切的节点时应该返回0吗?它再次进入该块,然后返回-1

 else {
        node=node.right;
        deleter(node,key);
 }

2 个答案:

答案 0 :(得分:0)

您将忽略递归调用返回的值:

private int deleter(BSTNode node, int key) {
    if(node.key==key){
        if(node.right==null && node.left==null){
            node=null;
            return 0;
        }
    }
    else if(key<node.key){
        node=node.left;
        return deleter(node,key);

    }
    else {
        node=node.right;
        return deleter(node,key);
    }


    return -1;
}

编辑:您应该在此代码中添加一些空检查,否则可能会以NullPointerException结尾。

答案 1 :(得分:0)

递归调用effectivlt返回0,但是您忽略了调用者的返回值:

private int deleter(BSTNode node, int key) {
    if(node.key == key){
        if(node.right == null && node.left == null){
            node = null;
            return 0;
        }
    }else if(key < node.key){
        node = node.left;
        return deleter(node,key);      // return here    
    }else {
        node = node.right;
        return deleter(node,key);      // return here
    }   
    return -1;
}