按级别顺序遍历时增加队列大小

时间:2018-09-20 18:11:18

标签: java queue binary-search-tree traversal

我正在使用级别顺序类遍历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中删除元素。

谢谢!

0 个答案:

没有答案