public static <A> TreeNode<Op<A>> of(
		final int depth,
		final ISeq<? extends Op<A>> operations,
		final ISeq<? extends Op<A>> terminals
	) {
		return of(depth, operations, terminals, RandomRegistry.getRandom());
	}
public static < A > TreeNode < Op < A > > of ( final int depth , final ISeq < ? extends Op < A > > operations , final ISeq < ? extends Op < A > > terminals ) { return of ( depth , operations , terminals , RandomRegistry . getRandom ( ) ) ; }
Create a new, random program tree from the given (non) terminal
operations with the desired depth. The created program tree is a
<em>full</em> tree.

@param depth the desired depth of the program tree
@param operations the list of <em>non</em>-terminal operations
@param terminals the list of terminal operations
@param <A> the operational type
@return a new program tree
@throws NullPointerException if one of the given operations is
{@code null}
@throws IllegalArgumentException if the given tree depth is smaller than
zero