我一直在努力在没有明确具有迭代器的二进制搜索树上实现JUNIT测试。代替迭代器,该树具有一种称为getNext((的方法,我假设它与一段时间循环同时我可以在测试中没有错误的情况下测试树。问题在于我不确定如何实现测试中的WARE循环以使我的测试工作。
public class BinarySearchTree<T extends Comparable<T>> implements
BSTInterface<T> {
protected BSTNode<T> root;
boolean found;
protected LinkedUnbndQueue<T> inOrderQueue; // queue of info
protected LinkedUnbndQueue<T> preOrderQueue; // queue of info
protected LinkedUnbndQueue<T> postOrderQueue; // queue of info
public BinarySearchTree()
{
root = null;
}
private T recGet(T element, BSTNode<T> tree)
{
if (tree == null)
return null; // element is not found
else if (element.compareTo(tree.getInfo()) < 0)
return recGet(element, tree.getLeft()); // get from left subtree
else if (element.compareTo(tree.getInfo()) > 0)
return recGet(element, tree.getRight()); // get from right subtree
else
return tree.getInfo(); // element is found
}
public T get(T element)
// Returns an element e from this BST such that e.compareTo(element) == 0;
// if no such element exists, returns null.
{
return recGet(element, root);
}
private T getPredecessor(BSTNode<T> tree)
// Returns the information held in the rightmost node in tree
{
while (tree.getRight() != null)
tree = tree.getRight();
return tree.getInfo();
}
private void inOrder(BSTNode<T> tree)
// Initializes inOrderQueue with tree elements in inOrder order.
{
if (tree != null) {
inOrder(tree.getLeft());
inOrderQueue.enqueue(tree.getInfo());
inOrder(tree.getRight());
}
}
private void preOrder(BSTNode<T> tree)
// Initializes preOrderQueue with tree elements in preOrder order.
{
if (tree != null) {
preOrderQueue.enqueue(tree.getInfo());
preOrder(tree.getLeft());
preOrder(tree.getRight());
}
}
private void postOrder(BSTNode<T> tree)
// Initializes postOrderQueue with tree elements in postOrder order.
{
if (tree != null) {
postOrder(tree.getLeft());
postOrder(tree.getRight());
postOrderQueue.enqueue(tree.getInfo());
}
}
public T getNext(int orderType)
{
if (orderType == INORDER)
return inOrderQueue.dequeue();
else if (orderType == PREORDER)
return preOrderQueue.dequeue();
else if (orderType == POSTORDER)
return postOrderQueue.dequeue();
else
return null;
}
我已删除了通常的添加,删除并包含从树节省空间的方法。我正在运行的测试使用了测试柜和测试人员。到目前为止,我对测试的内容只是简单的添加,删除,尺寸并包含测试。任何输入都将不胜感激。
构造树后,您将在测试中具有BinarySearchTree<SomeType>
类型的对象。
然后您可以致电getNext
直到返回null(如您在评论中所说的(
BinarySearchTree<SomeType> tree;
...
SomeType data;
while ((data = tree.getNext()) != null) {
//do whatever assertion you want to do with the returned data.
}