你好,我写这个方法是为了在二进制搜索树中搜索值,但无论值是否在bst中找到,它总是返回false。有人能告诉我我的错误是什么,我该怎么解决吗?
public boolean search(int key) {
BinaryTreeNode subRoot = null;
while (subRoot != null)
{
if (key > subRoot.getData()) {
root = subRoot.getRight();
}
else if (key < subRoot.getData())
root = subRoot.getLeft();
else
System.out.println("Searching for " + key + ": found");
return true;
}
System.out.println("Searching for " + key + ": NOT found");
return false;
}
没有更多的输入,这就是我能做的一切。您一开始忘记将subRoot分配给root。在循环中将值分配给根,这将导致数据丢失,很可能导致无限循环。另外,你的else语句没有刹车,所以如果你进入循环,它总是会返回true。
public boolean search(int key) {
BinaryTreeNode subRoot = root;
while (subRoot != null)
{
if (key > subRoot.getData())
subRoot = subRoot.getRight();
else if (key < subRoot.getData())
subRoot = subRoot.getLeft();
else{
System.out.println("Searching for " + key + ": found");
return true;
}
}
System.out.println("Searching for " + key + ": NOT found");
return false;
}
问题是,在while循环之前用null初始化subRoot,因此当您检查条件时,它将始终为false,因此将转到函数的末尾