default Optional<T> previousNode() {
		Optional<T> node = Optional.empty();

		if (parent().isPresent()) {
			final Optional<T> prev = previousSibling();
			if (prev.isPresent()) {
				node = prev.get().childCount() == 0
					? prev
					: prev.map(Tree::lastLeaf);
			} else {
				node = parent();
			}
		}

		return node;
	}
Return the node that precedes this node in a pre-order traversal of
{@code this} tree node. Returns {@code Optional.empty()} if this node is
the first node of the traversal, the root of the tree. This is an
inefficient way to traverse the entire tree; use an iterator instead.

@see #preorderIterator
@return the node that precedes this node in a pre-order traversal, or
        {@code Optional.empty()} if this node is the first
jenetics.ext/src/main/java/io/jenetics/ext/util/Tree.java