user
02/04/2018, 10:28 AMfun Node.bfs(): Sequence<Node> {
val start = generateSequence(this) { it.parents.first() }.last()
val queue: Queue<Node> = LinkedList<Node>().also { it.add(start) }
val visited = HashSet<Node>()
return buildSequence {
while(queue.isNotEmpty()){
val next = queue.remove()
if (next in visited)
continue
yield(next)
visited += next
queue += next.children.filter { it !in queue }
}
}
} should also conform to your specifications.