我目前正在练习我的数据结构技能,我遇到了一个问题。在这个特定的BST中,只要目标是-1,我的代码就不会返回正确的值。它应该返回BST中在值上最接近请求目标的值。
import java.lang.Math;
class Program {
public static int findClosestValueInBst(BST tree, int target) {
int temp = tree.value;
if(temp == target) {
return temp;
}
while(tree.left != null || tree.right != null){
if(tree.value < target){
tree = tree.right;
}
else if(tree.value > target){
tree = tree.left;
}
if(Math.abs(target - tree.value) < Math.abs(target - temp)){
temp = tree.value;
}
}
return temp;
}
static class BST {
public int value;
public BST left;
public BST right;
public BST(int value) {
this.value = value;
}
}
}希望这里的人能知道哪里出了问题。
我在下面贴出了BST组成的值的图片。
发布于 2019-09-30 09:59:32
你有(至少)四个问题:
temp之前更新tree (如果您在知道tree.value是否是null之前尝试访问它,可能会导致NPE )。null元素,则您没有正确处理它(可能导致NPE)。在你的while循环中试试这个:
while(tree != null) {
if(Math.abs(target - tree.value) < Math.abs(target - temp)) {
temp = tree.value;
}
if(tree.value < target) {
tree = tree.right;
}
else if(tree.value > target) {
tree = tree.left;
}
else {
return target;
}
}https://stackoverflow.com/questions/58160639
复制相似问题