Попытка использовать getInorderIterator, но это не печатает мое дерево InOrder - PullRequest
2 голосов
/ 21 апреля 2019

Я создал двоичное дерево поиска, и я могу добавлять и удалять его, но когда я пытаюсь использовать метод getInorderIterator и распечатать дерево, оно выводит «TreePackage.BinaryTree$InorderIterator@2e817b38»

возможноя просто вызываю метод неправильным способом?

Вот как я распечатываю его в своем основном классе:

System.out.println("In-order: " + tree.getInorderIterator());

Это моя реализация getInorderIterator ():

 public Iterator<T> getInorderIterator()
{
    return new InorderIterator();
}

private class InorderIterator implements Iterator<T>
    {
    private StackInterface<BinaryNode<T>> nodeStack;
    private BinaryNode<T> currentNode;

    public InorderIterator()
    {
        nodeStack = new LinkedStack<>();
        currentNode = root;
    }

    public boolean hasNext()
    {
        return !nodeStack.isEmpty() || (currentNode != null);
    }

    public T next() {
        BinaryNode<T> nextNode = null;

        while (currentNode != null) {
            nodeStack.push(currentNode);
            currentNode = currentNode.getLeftChild();
        }
        if (!nodeStack.isEmpty()) {
            nextNode = nodeStack.pop();
            assert nextNode != null;

            currentNode = nextNode.getRightChild();
        } else
            throw new NoSuchElementException();

        return nextNode.getData();
    }
    public void remove()
    {
        throw new UnsupportedOperationException();
    }
    }

1 Ответ

1 голос
/ 21 апреля 2019

Это:

System.out.println("In-order: " + tree.getInorderIterator());

... печатает (строковое значение) сам объект итератора. Если вы хотите распечатать элементы дерева, вы должны использовать итератор для извлечения элементов и их печати. Например,

for (Iterator<?> it = tree.getInorderIterator(); it.hasNext();) {
    System.out.println(it.next());
}
...