``` fun <T> T.recursiveFlatten(childSelector...
# announcements
j
Copy code
fun <T> T.recursiveFlatten(childSelector: (T) -> Iterable<T>): List<T> {
    val list = mutableListOf<T>()
    val queue = ArrayDeque<T>().apply { add(this@recursiveFlatten) }
    while (queue.isNotEmpty()) {
        val item = queue.removeFirst()
        list.add(item)
        queue.addAll(childSelector(item))
    }
    return list
}