![](/img/trans.png)
[英]Changing the recursive insertion of the (binary Search tree) to non-recursive?
[英]Non-recursive binary search
我正在尝试编写这个 bSearch() 方法。 我的教授为它提供了一些伪代码; 但是,我无法弄清楚如何实现其中的一些。 我已经编写了大部分代码; 但是,我有两行仍然不太正确。 我已将我遇到困难的部分加粗。 谢谢!
private int bSearch(Item SearchItem)
{
int low = Integer.MIN_VALUE;
int high = Integer.MAX_VALUE;
int foundPosition = -1;
int middle;
Item midPos;
while (low <= high && **we should continue looping**)
{
middle = (low + high) / 2;
midPos = MyStore.get(middle);
if (SearchItem.equals(midPos) == true)
{
foundPosition = middle;
**quit while loop**
}
else if (SearchItem.compareTo(middle) < midPos)
{
high = middle - 1;
}
else
{
low = middle + 1;
}
}
return foundPosition;
}
欢迎来到 SO。 你已经有了一个不错的开始,但这里有一些建议。
foundPosition
- 只需返回循环内的位置,如果未找到该项目,则返回 -1myStore
获得下限(通常为 0)和上限。 这比使用最小和最大整数值更有意义。compareTo
根据结果返回 0、负数或正数这会给你留下类似以下的东西:
private int bSearch(Item searchItem) {
int low = 0;
int high = myStore.size() - 1;
while (low <= high) {
int middle = (low + high) / 2;
int comparison = searchItem.compareTo(myStore.get(middle));
if (comparison < 0) {
low = middle + 1;
} else if (comparison > 0) {
high = middle - 1;
} else {
return middle;
}
}
return -1;
}
请注意,我已将大小写和格式更改为在此站点(和其他地方)上被认为更标准的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.