Увеличение размера очереди при обходе по порядку уровней - PullRequest
0 голосов
/ 20 сентября 2018

Я пересекаю BST, используя класс порядка уровней.Когда я добавляю элемент в свой класс очереди, мне нужно увеличить размер очереди, но, поскольку мой код прямо сейчас, это не так:

public class LevelorderIterator implements Iterator<Node> {
protected Queue<Node> q;
Node root;
public LevelorderIterator(Node tree) {
    this.root = tree;
    q = new Queue <Node>();
    q.enqueue(root);
}

public Node next() {
    Node temp = q.dequeue();
    if(temp.left != null){
        q.enqueue(temp.left);
    }
    if(temp.right != null){
        q.enqueue(temp.right);
    }
    return temp;
}

Постановка в очередь (в классе очереди):

public void enqueue(E item) {
    if (isEmpty()) {
        lst = fst = new QueueItem<E>(item, null);
    } else {
        lst.next = new QueueItem<E>(item, null);
        lst = lst.next;
    }
    size++;
}

Обход работает нормально, так что я полагаю, что я слишком долго ослепляла от роли в моем коде ... Где я смотрю на это неправильно?

Редактировать: Этомоя очередь:

  public E dequeue() throws EmptyContainerException {
    if (isEmpty()) {
        throw new EmptyContainerException(">>> Queue is empty.");
    }
    E e = fst.element;
    fst = fst.next;
    size--;
    if (isEmpty()) {
        lst = null;
    }
    return e;
}

В моей тестовой программе я вызываю next, который затем вызывает dequeu:

                case 'l':
                LevelorderIterator lo = tree.levelorder();
                while (lo.hasNext()) {
                    Node tmp = lo.next();
                    System.out.println("Key=" + tmp.key + " Value="
                            + tmp.val);
                }

Так что после этого случая я получаю вывод узлов в BST в правильном порядке.Но если я проверяю размер моей очереди, то это всегда «1», даже если мой BST равен, например, 5. Размер 1 исходит из очереди в конструкторе lo.Я хочу, чтобы размер моей очереди совпадал с BST до тех пор, пока я не начну удалять его из очереди или удалять элементы из BST.

Спасибо!

...