Реализация теста JUnit в бинарном дереве поиска, в котором нет итератора? - PullRequest
0 голосов
/ 25 апреля 2018

Я работал над реализацией теста JUnit для двоичного дерева поиска, в котором явно нет итератора.Вместо итератора в этом дереве есть метод getNext (), который, я бы предположил, в тандеме с циклом while я мог проверить дерево без ошибок в тесте.Проблема в том, что я не уверен, как внедрить цикл while в мои тесты, чтобы заставить мои тесты работать.

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;
}

Я удалил обычные методы add, remove и содержит методы из дерева длясэкономить место.Тесты, которые я запускаю, используют TestCase и TestRunner.Пока что я имею для тестов просто простое добавление, удаление, размер и содержит тесты.Любой вклад будет принята с благодарностью.

1 Ответ

0 голосов
/ 25 апреля 2018

После построения дерева в ваших тестах будет объект типа BinarySearchTree<SomeType>.

Затем вы можете позвонить getNext, пока он не вернется к нулю (как вы сказали в комментариях)

BinarySearchTree<SomeType> tree;
...
SomeType data;
while ((data = tree.getNext()) != null) {
    //do whatever assertion you want to do with the returned data.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...