Я пересекаю 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.
Спасибо!