public ContactIterator(Contact contact) { if (contact.isLeaf()) { nextLeaf = contact; } else { unfinishedIterators.push(contact.children()); } }
private Contact findNextLeaf() { while (true) { if (unfinishedIterators.isEmpty()) { return null; } Iterator<Contact> iterator = unfinishedIterators.pop(); if (iterator.hasNext()) { Contact contact = iterator.next(); currentIterator = iterator; if (iterator.hasNext()) { unfinishedIterators.push(iterator); } if (contact.isLeaf()) { return contact; } else { unfinishedIterators.push(contact.children()); } } } }