我有一个类BinarySearchTree
它有两个数据元素,Node root
和int size
。类别Node
具有四个数据元素Node left, right, up
和int data
。二进制搜索树迭代器 - 在/前/后/顺序
我想创建一个Iterator类,它的构造函数接受它将要使用的遍历类型。只有在调用next
时,它才会遍历下一个元素。
MyIterator
应该在MyIterator
中应该包含哪些数据元素,以免混乱?我想也许有Stack<Node>
,但这感觉像一个非常糟糕的解决方案。我能做些什么来掩盖所有三种可能的模式?没有任何方法可以在Iterator内部没有额外的数据结构(队列/堆栈/映射)的情况下做到这一点?
public class MyIterator
{
private BinarySearchTree tree;
private Node current;
private int mode;
public MyIterator(BinarySearchTree tree, int mode)
{
// mode = 1 -> IN ORDER TRAVERSAL
// mode = 2 -> PREORDER TRAVERSAL
// mode = 3 -> POSTORDER TRAVERSAL
this.tree = tree;
this.mode = mode;
}
public boolean hasNext()
{
...
}
public void next()
{
...
}
}
这是我的意图,但我正在使用'int'来简化问题到核心问题,这是数据元素/算法将进入迭代器 – Hatefiend