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);
}
答案 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;
}