static <T> Stream<Node<T>> traversePostOrder(Node<T> node) { return node .getChildren() .foldLeft(Stream.<Node<T>> empty(), (acc, child) -> acc.appendAll(traversePostOrder(child))) .append(node); }
/** * Traverses this tree in a specific order. * * @param order the tree traversal order * @return A sequence of nodes. * @throws java.lang.NullPointerException if order is null */ default Seq<Node<T>> traverse(Order order) { Objects.requireNonNull(order, "order is null"); if (isEmpty()) { return Stream.empty(); } else { final Node<T> node = (Node<T>) this; switch (order) { case PRE_ORDER: return TreeModule.traversePreOrder(node); case IN_ORDER: return TreeModule.traverseInOrder(node); case POST_ORDER: return TreeModule.traversePostOrder(node); case LEVEL_ORDER: return TreeModule.traverseLevelOrder(node); default: throw new IllegalStateException("Unknown order: " + order.name()); } } }
static <T> Stream<Node<T>> traversePostOrder(Node<T> node) { return node .getChildren() .foldLeft(Stream.<Node<T>> empty(), (acc, child) -> acc.appendAll(traversePostOrder(child))) .append(node); }
/** * Traverses this tree in a specific order. * * @param order the tree traversal order * @return A sequence of nodes. * @throws java.lang.NullPointerException if order is null */ default Seq<Node<T>> traverse(Order order) { Objects.requireNonNull(order, "order is null"); if (isEmpty()) { return Stream.empty(); } else { final Node<T> node = (Node<T>) this; switch (order) { case PRE_ORDER: return TreeModule.traversePreOrder(node); case IN_ORDER: return TreeModule.traverseInOrder(node); case POST_ORDER: return TreeModule.traversePostOrder(node); case LEVEL_ORDER: return TreeModule.traverseLevelOrder(node); default: throw new IllegalStateException("Unknown order: " + order.name()); } } }