无法推断 BinarySearchTree 迭代器的类型参数

问题描述 投票:0回答:0

我正在做一个作业来改变一个类和方法,这样它就可以支持增强的for循环来遍历二叉树。图片已链接。提前谢谢你!

修改/完善BSTIterator.java类,使用setTraversalType方法使用增强的for循环以逻辑层级设置的遍历类型遍历树。您还需要对 BinarySearchTree.java 中的迭代器方法进行适当的更改。

您在第 2 部分的工作允许破坏 BinarySearchTree.java 中现有的 getNext 方法;即,您不需要同时拥有有效的 BSTIterator 类和有效的 getNext 方法。

BSTIterator.java:

    public class BSTIterator <E> implements Iterator<E>, Iterable<E> {

protected LLQ<E> traversalQueue;
protected TraversalType traversalType;
protected E rootData;
protected int size;
protected int counter;


public BSTIterator(E rootData, int size) {
    this.rootData = rootData;
    this.size = size;
    this.counter = 0;
}

@Override
public boolean hasNext() {
    return counter < size;
    //return !traversalQueue.isEmpty();
}

@Override
public E next() {
    counter++;
    return traversalQueue.dequeue();
}

@Override
public Iterator<E> iterator() {
    return this;
}

public void setTraversalType(TraversalType traversalType, LLQ<E> traversalQueue) {
    this.traversalType = traversalType;
    this.traversalQueue = traversalQueue;
}

}

BinarySearchTree.java 声明:

    public class BinarySearchTree<T> extends Comparable<T>> implements BSTInterface<T>, Iterable<T> {

protected TraversalType traversalType;
protected BSTNode<T> root;   
boolean found;   // used by remove

T[] rebalanceArray;  // for rebalancing the tree
int rebalanceIndex;  //           "

// for current traversal logic
protected LLQ<T> inOrderQ;
protected LLQ<T> preOrderQ;
protected LLQ<T> postOrderQ;

迭代器方法:(该方法错误)

    public Iterator<T> iterator() {
    if (root == null) {
        return new BSTIterator<>(null, 0); 
    }
    else {
        if (traversalType == TraversalType.INORDER) {
            return new BSTIterator<>(root.getData(),size, inOrderQ);
        } else if (traversalType == TraversalType.PREORDER) {
            return new BSTIterator<>(root.getData(),size, preOrderQ);
        } else if (traversalType == TraversalType.POSTORDER) {
            return new BSTIterator<>(root.getData(),size, postOrderQ);
        } else {
            return new BSTIterator<>(null, 0);
        }
    }
}

setTraversalType 方法(不可更改):

    public void setTraversalType(TraversalType orderType) {
    switch (orderType) {
    case INORDER:
        inOrderQ = new LLQ<T>();
        inOrder(root);
        break;
    case PREORDER:
        preOrderQ = new LLQ<T>();
        preOrder(root);
        break;
    case POSTORDER:
        postOrderQ = new LLQ<T>();
        postOrder(root);
        break;
    }
}

我的迭代器方法中的红线尺寸不足:

    if (traversalType == TraversalType.INORDER) {
            return new BSTIterator<>(root.getData(),size, inOrderQ);
        } else if (traversalType == TraversalType.PREORDER) {
            return new BSTIterator<>(root.getData(),size, preOrderQ);
        } else if (traversalType == TraversalType.POSTORDER) {
            return new BSTIterator<>(root.getData(),size, postOrderQ);

with error cannot infer type arguments for BSTIterator<>

java for-loop binary-search-tree tree-traversal
© www.soinside.com 2019 - 2024. All rights reserved.