我正在尝试创建自己的二进制搜索树。但是我想不出任何方式来实现具有hasNext(),next()的工作迭代器。我的想法是遍历二叉搜索树的唯一方法是通过递归。但是,如果我尝试使用next,如何保存递归调用,以便在再次调用next并返回值时恢复调用?还有其他方法
import java.util.Iterator;
public class TreeWordSet implements WordSetInterface {
private BST root = null;
private class BST {
Word value;
BST left = null;
BST right = null;
BST(Word word) {
value = word;
}
void add(Word newWord) {
if (newWord.compareTo(value) < 0) {
if(left == null) {
left = new BST(newWord);
} else {
left.add(newWord);
}
} else if (newWord.compareTo(value) > 0) {
if (right == null) {
right = new BST(newWord);
} else {
right.add(newWord);
}
}
}
}
@Override
public void add(Word word) {
if (root == null) {
root = new BST(word);
} else {
root.add(word);
}
}
@Override
public boolean contains(Word word) {
return false;
}
@Override
public int size() {
return 0;
}
private class TreeWordSetIterator implements Iterator<Word> {
@Override
public boolean hasNext() {
return false;
}
@Override
public Word next() {
return null;
}
}
@Override
public Iterator<Word> iterator() {
return new TreeWordSetIterator();
}
}
如果这是出于学习目的的练习,也许最好的方法就是去看看TreeSet是如何做到的。如果这是供生产使用的练习,请立即在此处停止,并在需要时扩展TreeSet。