@Override
	public T next() {
		final T result;
		if (subtree.hasNext()) {
			result = subtree.next();
		} else if (children.hasNext()) {
			final T next = children.next();

			subtree = new PostOrderIterator<>(
				mapper.apply(next), next, dtor, mapper, identity, visited
			);

			result = subtree.next();
		} else {
			result = root;
			root = null;
		}

		return result;
	}
Create a new (<em>property</em>) pre-order iterator from the given
arguments.

@param object the root object of the model
@param dtor the extractor function which extracts the direct
       extractable properties
@param mapper mapper function for creating the source object for the
       next level from the extracted objects of type {@code T}
@param identity objects, returned by this function are used for identifying
       already visited source objects, for preventing infinite loops
jenetics.incubator/src/main/java/io/jenetics/incubator/beans/internal/PostOrderIterator.java