Я боролся с реализацией бинарного дерева поиска с помощью метода итератора.Я проверял этот алгоритм на WikiPedia:
def search_recursively(key, node):
if node is None or node.key == key:
return node
if key < node.key:
return search_recursively(key, node.left)
# key > node.key
return search_recursively(key, node.right)
Я перевел его на Java:
public Iterator<T> iterator()
{
return new Iterator<T>()
{
private int count = 0;
@Override
public boolean hasNext()
{
return count++ < size;
}
@Override
public T next()
{
return search(root, root.word);
}
public T search(BST root, T word)
{
if (root == null || root.word.compareTo(word) == 0)
{
return root.word;
}
if (root.word.compareTo(word) < 0)
{
return search(root.left, word);
}
return search(root.right, word);
}
};
При попытке запуститьЯ получаю только корневой элемент BST:
MyWordSet bst = new MyWordSet();
T bst = new T("one");
T bst = new T("two");
T bst = new T("three");
T bst = new T("four");
T bst = new T("five");
T bst = new T("six");
bst.add(w1);
bst.add(w2);
bst.add(w3);
bst.add(w4);
bst.add(w5);
bst.add(w6);
Iterator<T> it = bst.iterator();
while (it.hasNext())
{
System.out.println(it.next());
}
Таким образом, вывод:
one
one
one
one
one
one
Итак почему этот метод внутри моего Итератора не работает для меня, чтобы добраться до всего дерева?Я действительно не могу понять, что здесь не так и почему он печатает только один, когда должен идти вниз по дереву.