Почему этот метод всегда возвращает -1 - PullRequest
0 голосов
/ 25 ноября 2018
  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 голосов
/ 25 ноября 2018

Рекурсивные вызовы 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;
}
0 голосов
/ 25 ноября 2018

Вы игнорируете значения, возвращаемые рекурсивными вызовами:

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.

...