Я хочу написать собственный итератор для BinaryTree.Этот итератор должен возвращать Node<?>
объектов.Я получаю ошибку компиляции в файле InorderIterator
в строках с рекурсивным вызовом fillList: fillList(currentNode.getLeft());
Ошибка: Error:(14, 37) java: incompatible types: rclib.Node cannot be converted to T
Может кто-нибудь объяснить мне, почему мой подход не работает?Или как это исправить
Node.java
package rclib;
public class Node<T extends Comparable<T>> {
T key;
Node<T> left;
Node<T> right;
public Node(T key, Node left, Node right) {
this.key = key;
this.left = left;
this.right = right;
}
public Node(T key) {
this(key, null, null);
}
public Node<T> getLeft() {
return left;
}
public Node<T> getRight() {
return right;
}
public T getKey() {
return key;
}
}
InorderIterator.java
package rclib;
import java.util.*;
public class InorderIterator<T extends Node<?>> implements Iterator<T> {
LinkedList<T> list;
public InorderIterator(T root) {
list = new LinkedList<T>();
fillList(root);
}
public void fillList(T currentNode) {
if (currentNode == null) return;
fillList(currentNode.getLeft());
list.add(currentNode);
fillList(currentNode.getRight());
}
@Override
public boolean hasNext() {
return !list.isEmpty();
}
@Override
public T next() {
return list.removeFirst();
}
}
AVLTree.java
package rclib;
public class AVLTree<T extends Comparable<T>> implements Iterable<Node<T>>{
private Node<T> root;
@Override
public Iterator<Node<T>> iterator() {
return new InorderIterator<Node<T>>(root);
}
}