我try 在for循环中打印布尔插入(K)的结果,但在第一次插入后,打印停止,这表明第二次插入没有完全成功.
在方法insert(K)中,调用方法"retrieves(K)",判断K是否已经被插入.
for (int i = 100; i > 0; i--) {
System.out.println(m.insert(i +1, 22));
System.out.println("dd");
System.out.println(m.retrieve(i+1).first + ",,,"+m.retrieve(i+1).second);
System.out.println(i + " insertion done");
System.out.println("---------");
}
结果是
-------------------
true
dd
true,,,22
100 insertion done
---------
true
dd
删除insert()方法中的"retrieves(K)"调用后,打印运行正常,因此我假设"retrieves(K)"方法存在问题,而且由于没有错误,cpu使用率更高,这可能是一个无限循环,问题是,我看不到它.
下面是"检索(K)"方法
public Pair<Boolean, T> retrieve(K k) {
Pair<Boolean, T> ff = new Pair<Boolean, T>(false, null);
BSTMapNode<K, T> p = root;
if(root==null) {
return new Pair<Boolean,T>(false,null);
}
else
while (p != null) {
if (k.compareTo(p.key) == 0) {
ff.first=true;
ff.second=p.data;
return new Pair<Boolean,T>(true,p.data);
} else if (k.compareTo(p.key) < 0) {
p = p.left;
} else
p = p.right;
}
return new Pair<Boolean,T>(false,null);
}
编辑:添加了插入方法
public boolean insert(K k, T e) {
BSTMapNode<K, T> p = current;
BSTMapNode<K, T> q = current;
// ISSUE HERE
if (retrieve(k).first == true) {
current = q;
return false;
//
}
BSTMapNode<K, T> tmp = new BSTMapNode<K, T>(k, e);
if (root == null) {
root = current = tmp;
return true;
} else {
if (k.compareTo(current.key) < 0)
current.left = p;
else
current.right = p;
current = p;
return true;
}