我正在构建一个二叉搜索树类,它有一个预序迭代器和一个有序迭代器。我已经为前序迭代器编写了一个尝试,但是我认为我没有正确的代码。我阅读了一些关于迭代器编码的指南,我接受了我解释的内容,并尝试在我的设计中实现它。
根据我对预顺序遍历的理解,先访问根,然后访问左,然后访问右。我对如何用我的代码实现这一点感到困惑。在下一个方法中,假设根不为null,然后访问左侧并检查右侧,然后移动到右侧节点。
代码澄清的一些注解e=节点的元素/数据k=键
public class BSTPreOrderIterator<E, K> implements StructureIterator<E> {
private final BST<E, K> tree;
BSTNode<E> root =null;
public BSTPreOrderIterator(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> current = root;
if(!(root == null)){
current = root.getLeft();
if(current.getRight() != null){
current = current.getRight();
}
if(current.left != null){
current = current.getLeft();
}
}
return current.getData();
}
@Override
public boolean hasNext() {
return !tree.isEmpty();
}
}
暂无答案!
目前还没有任何答案,快来回答吧!