我正在使用级别顺序类遍历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;
}
在我的测试程序中,我接下来调用,直到调用dequeu:
case 'l':
LevelorderIterator lo = tree.levelorder();
while (lo.hasNext()) {
Node tmp = lo.next();
System.out.println("Key=" + tmp.key + " Value="
+ tmp.val);
}
因此,在这种情况下,我以正确的顺序获得了BST中节点的输出。但是,如果我检查队列的大小,即使我的BST例如5,它也始终为“ 1”。大小1来自lo的构造函数中的队列。我想要的是让队列大小与BST相同,直到我开始对其进行排队或从BST中删除元素。
谢谢!