T () { while (!queue.isEmpty()) { T result = ourNotNullizer.nullize(queue.remove()); Iterable<? extends T> children = tree.fun(result); Iterator<? extends T> it = children == null ? null: children.iterator(); if (it == null || !it.hasNext()) return result; while (it.hasNext()) queue.add(ourNotNullizer.notNullize(it.next())); } return stop(); }