Java 为什么这个方法总是返回-1
忽略递归调用返回的值:Java 为什么这个方法总是返回-1,java,if-statement,recursion,return,return-value,Java,If Statement,Recursion,Return,Return Value,忽略递归调用返回的值: else { node=node.right; deleter(node,key); } 编辑:您应该在此代码中添加一些空检查,否则可能会导致NullPointerException。递归调用effectivlt返回0,但您忽略了调用者的返回值: private int deleter(BSTNode node, int key) { if(node.key==key){ if(node.right==null
else {
node=node.right;
deleter(node,key);
}
编辑:您应该在此代码中添加一些空检查,否则可能会导致NullPointerException。递归调用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);
}
else {
node=node.right;
return deleter(node,key);
}
return -1;
}
这是因为递归代码中唯一的返回语句是-1。不只是调用deleter,只需在前面添加return语句并删除最后一个return-1;语句。为什么需要返回-1?@SMA如果没有找到匹配项,或者如果找到匹配项,则该方法应返回-1,但不要将节点设置为null。那么我该怎么办,如果删除返回的递归函数,就可以了?您的最后一句话不正确。如果node.key==key为true,但node.right==null&&node.left==null为false,则此方法将不返回任何内容。因此,如果没有最后的返回语句,代码将无法通过编译。
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;
}
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;
}