Я пытаюсь реализовать итератор в своем собственном классе TreeSet. Однако моя попытка создать его работает только до тех пор, пока текущий узел не станет корнем. Итератор выглядит так:
Конструктор:
public TreeWordSetIterator()
{
next = root;
if(next == null)
return;
while(next.left != null)
next = next.left;
}
имеетСледующий:
public boolean hasNext()
{
return next != null;
}
Следующий:
public TreeNode next()
{
if(!hasNext()) throw new NoSuchElementException();
TreeNode current = next;
next = findNext(next); // find next node
return current;
}
найти следующий:
private TreeNode findNext(TreeNode node)
{
if(node.right != null)
{
node = node.right;
while(node.left != null)
node = node.left;
return node;
}
else
{
if(node.parent == null)
return null;
while(node.parent != null && node.parent.left != node)
node = node.parent;
return node;
}
}
Это работает нормально, пока я не доберусь до своего корневого узла. Поэтому я могу перебирать только левый дочерний элемент root, а не правый. Может ли кто-нибудь дать мне несколько советов о том, что я делаю неправильно? Я не жду решения, просто несколько советов.
Вопрос: Как я могу найти следующий узел в TreeSet, если каждый узел указывает на своего родителя, левого дочернего элемента и правого дочернего элемента.
заранее спасибо