Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package traverse_pre_order;

import iterable_stream.IterableStream;
import java.util.NoSuchElementException;
import java.util.Stack;
import simple_iterator.SimpleIterator;

public final class AP {

/**
* Get an {@link IterableStream iterable stream} of all the {@link TreeNode nodes} in the binary
* tree in pre-order.
* @param root Binary tree root {@link TreeNode node}.
* @return The {@link IterableStream iterable stream} in pre-order.
*/
public static IterableStream<TreeNode> traversePreOrder(final TreeNode root) {
final var stack = new Stack<TreeNode>();
stack.push(root);

return IterableStream.from(
SimpleIterator.toIterator(() -> {
while (!stack.isEmpty()) {
var node = stack.pop();

if (node != null) {
stack.push(node.right);
stack.push(node.left);
return node;
}
}

throw new NoSuchElementException();
})
);
}
}

class TreeNode {

// Class representing a single node in the binary tree.

int val;
TreeNode left;
TreeNode right;

TreeNode() {}

TreeNode(int val) {
this.val = val;
}

TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"name": "traversePreOrder()"
}
Original file line number Diff line number Diff line change
Expand Up @@ -873,6 +873,137 @@ final class AP {
/////////////////////////// END ADVENTURE PACK CODE ////////////////////////////"
`;

exports[`App can equip single goody: Java traversePreOrder() 1`] = `
"////////////////////////// BEGIN ADVENTURE PACK CODE ///////////////////////////
// Adventure Pack commit fake-commit-hash
// Running at: https://example.com/

import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Spliterator;
import java.util.Stack;
import java.util.function.Consumer;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;

interface IterableStream<T> extends Iterable<T>, Stream<T> {
@Override
public void forEach(Consumer<? super T> action);

@Override
public Spliterator<T> spliterator();

public static <T> IterableStream<T> from(final Iterable<T> iterable) {
return from(iterable.spliterator());
}

public static <T> IterableStream<T> from(final Iterator<T> iterator) {
return from(() -> iterator);
}

public static <T> IterableStream<T> from(final Spliterator<T> spliterator) {
return from(StreamSupport.stream(spliterator, false));
}

public static <T> IterableStream<T> from(final Stream<T> stream) {
@SuppressWarnings("unchecked")
var proxy = (IterableStream<T>) Proxy.newProxyInstance(
ClassLoader.getSystemClassLoader(),
new Class<?>[] { IterableStream.class },
(Object _proxy, Method method, Object[] args) ->
Stream.class.getMethod(
method.getName(),
method.getParameterTypes()
).invoke(stream, args)
);
return proxy;
}
}

interface SimpleIterator<T> {
public T next();

static enum HasNextState {
TRUE,
FALSE,
UNKNOWN,
}

public static <T> Iterator<T> toIterator(final SimpleIterator<T> iterator) {
final HasNextState[] hasNextState = { HasNextState.UNKNOWN };
final Object[] elementReserve = { null };

return new Iterator<T>() {
public boolean hasNext() {
if (hasNextState[0] == HasNextState.UNKNOWN) {
try {
elementReserve[0] = iterator.next();
hasNextState[0] = HasNextState.TRUE;
} catch (NoSuchElementException e) {
hasNextState[0] = HasNextState.FALSE;
}
}

return hasNextState[0] == HasNextState.TRUE;
}

public T next() {
if (hasNextState[0] == HasNextState.TRUE) {
hasNextState[0] = HasNextState.UNKNOWN;

@SuppressWarnings("unchecked")
T element = (T) elementReserve[0];

elementReserve[0] = null;
return element;
}

if (hasNextState[0] == HasNextState.UNKNOWN) {
return iterator.next();
}

throw new NoSuchElementException();
}
};
}
}

final class AP {
private AP() {}

/**
* Get an {@link IterableStream iterable stream} of all the {@link TreeNode nodes} in the binary
* tree in pre-order.
* @param root Binary tree root {@link TreeNode node}.
* @return The {@link IterableStream iterable stream} in pre-order.
*/
public static IterableStream<TreeNode> traversePreOrder(final TreeNode root) {
final var stack = new Stack<TreeNode>();
stack.push(root);

return IterableStream.from(
SimpleIterator.toIterator(() -> {
while (!stack.isEmpty()) {
var node = stack.pop();

if (node != null) {
stack.push(node.right);
stack.push(node.left);
return node;
}
}

throw new NoSuchElementException();
})
);
}
}

/////////////////////////// END ADVENTURE PACK CODE ////////////////////////////"
`;

exports[`App can equip single goody: JavaScript Array.prototype.slidingWindows 1`] = `
"////////////////////////// BEGIN ADVENTURE PACK CODE ///////////////////////////
// Adventure Pack commit fake-commit-hash
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -539,6 +539,47 @@ final class AP {
}"
`;

exports[`App can render goody: Java traversePreOrder() 1`] = `
"package traverse_pre_order;

import iterable_stream.IterableStream;
import simple_iterator.SimpleIterator;

import java.util.NoSuchElementException;
import java.util.Stack;

final class AP {
private AP() {}

/**
* Get an {@link IterableStream iterable stream} of all the {@link TreeNode nodes} in the binary
* tree in pre-order.
* @param root Binary tree root {@link TreeNode node}.
* @return The {@link IterableStream iterable stream} in pre-order.
*/
public static IterableStream<TreeNode> traversePreOrder(final TreeNode root) {
final var stack = new Stack<TreeNode>();
stack.push(root);

return IterableStream.from(
SimpleIterator.toIterator(() -> {
while (!stack.isEmpty()) {
var node = stack.pop();

if (node != null) {
stack.push(node.right);
stack.push(node.left);
return node;
}
}

throw new NoSuchElementException();
})
);
}
}"
`;

exports[`App can render goody: JavaScript Array.prototype.slidingWindows 1`] = `
"import "ArraySlice";

Expand Down