【发布时间】:2020-12-07 17:58:41
【问题描述】:
我正在构建一个二叉搜索树类,它有一个中序迭代器和一个预序迭代器。我已经为中序迭代器编写了一个尝试,但我认为我的代码不正确。我阅读了一些关于对迭代器进行编码的指南,并采用了我所解释的内容并尝试在我的设计中实现它。返回树的 hasNext 是有问题的。目前 tree.isEmpty() 返回树的根节点是否为空。我不确定在树的迭代期间检查是否正确。
我对我对 Inorder 迭代如何工作的理解并不完全有信心。目前,我从 root.left 开始使用 next() 方法,而不是尝试从那里进行迭代。
代码澄清的一些注意事项 E = 节点的元素/数据 K = 键
public class BSTIterator<E, K> implements StructureIterator<E> {
private final BST<E, K> tree;
BSTNode<E> root =null;
// Comparator<E> sortFct;
// BiFunction<K, E, Integer> searchFct;
public BSTIterator( BSTNode<E> root,Comparator<E> sortFct,
BiFunction<K, E, Integer> searchFct) {
this.tree = new BST<E, K>(sortFct, searchFct);
this.root = root;
}
@Override
public E next() {
BSTNode<E> node = tree.root.getLeft();
E result = node.getData();
if(node.getRight() != null){
while(node != null){
tree.root.getRight();
node = node.getLeft();
}
}
return result;
}
@Override
public boolean hasNext() {
return !tree.isEmpty();
}
}
【问题讨论】:
标签: java iterator binary-search-tree inorder