static <T> Stream<Node<T>> traverseInOrder(Node<T> node) { if (node.isLeaf()) { return Stream.of(node); } else { final io.vavr.collection.List<Node<T>> children = node.getChildren(); return children .tail() .foldLeft(Stream.<Node<T>> empty(), (acc, child) -> acc.appendAll(traverseInOrder(child))) .prepend(node) .prependAll(traverseInOrder(children.head())); } }
/** * 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>> traverseInOrder(Node<T> node) { if (node.isLeaf()) { return Stream.of(node); } else { final io.vavr.collection.List<Node<T>> children = node.getChildren(); return children .tail() .foldLeft(Stream.<Node<T>> empty(), (acc, child) -> acc.appendAll(traverseInOrder(child))) .prepend(node) .prependAll(traverseInOrder(children.head())); } }
/** * 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()); } } }