我的班级正在做AVLTree,我有一项任务,我遇到了麻烦。我已完成实现,但代码无法正常运行。我的老师给了我们一个测试课,检查我们是否正确完成了。有几个测试我的实现没有通过,但我想专注于现在第一次失败的测试。
这是第一次测试的代码。
'case 1: // Test 1: add and find a few entries
try {
AVLTree<String, Integer> tree = new AVLTree<String, Integer>(
stringComp);
String st;
st = new String("hello");
tree.insert(st, new Integer(0));
st = new String("hello6");
tree.insert(st, new Integer(1));
if (tree.find(new String("hello")) == null
|| tree.find(new String("hello6")) == null) {
System.out.println("*****Test 1: Failed");
} else
System.out.println("Test 1: Passed");
} catch (AVLTreeException e) {
System.out.println("*****Test 1: Failed"); // getting this one
}`
我添加了一些打印语句来检查代码在哪里破坏,似乎它正在捕获AVLException,我认为这意味着我的插入或查找方法有问题。
public void insert(K key, V value) { //inserts at leaf node
AVLnode<K, V> hold = TreeSearch(key, root); // find where to insert
AVLnode<K, V> z = hold;
DictEntry<K, V> temp = new DictEntry<K, V>(key, value); //creates the dictionary entry with key and value
z.setEntry(temp); // sets the node being inserted to the correct key and value
while (z != null) {
z.resetHeight(); // incase height is changed
if (java.lang.Math
.abs(z.left().getHeight() - z.right().getHeight()) > 1) {
z = triNodeRestructure(z.parent().parent(), z.parent(), z); //check if imbalanced
z.left().resetHeight();
z.right().resetHeight();
z.resetHeight();
break;
}
size++;
z = z.parent();
}
}
public DictEntry<K, V> find(K key) {
AVLnode<K, V> tempEntry = TreeSearch(key, root);
if (key.equals(tempEntry.element().key())) {
return tempEntry.getEntry();
} else
return null;
}
我还有一个私有方法,我对该插入进行了查找并找到了
private AVLnode<K, V> TreeSearch(K key, AVLnode<K, V> w) { //finds the node or returns leaf node
if (external(w)) {
return w;
}
if (treeComparator.compare(key, (K) w.element().key()) < 0) {
return TreeSearch(key, w.left());
}
else if (key.equals(w.element().key())) {
return w;
} else
return TreeSearch(key, w.right());
}
任何建议或提示都会非常感激,
感谢。