【问题标题】:Why this method returns always -1为什么这个方法总是返回 -1
【发布时间】:2019-04-27 08:24:32
【问题描述】:
  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);
 }

【问题讨论】:

  • 那是因为你的递归代码中唯一的返回语句是-1。而不是仅仅调用删除器,只需在前面添加return语句并删除最后一个return -1;语句。

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


【解决方案1】:

递归调用 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;
}

【讨论】:

  • 那我该怎么办,如果我删除返回的递归函数,它会好吗?
  • 你最后一句话不正确。如果(node.key == key) 为真但(node.right == null &amp;&amp; node.left == null) 为假,则此方法将不返回任何内容。因此,如果没有最后一个 return 语句,代码将无法通过编译。
【解决方案2】:

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

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

【讨论】:

  • 为什么需要 return -1?
  • @SMA 如果找不到匹配项,或者找到匹配项,该方法应返回 -1,但不要将 node 设置为 null
猜你喜欢
  • 1970-01-01
  • 2015-06-13
  • 2019-06-26
  • 2014-07-09
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多