import java.util.Iterator;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Consumer;
public class BST <E extends Comparable<E> > implements Iterable<E> {
private Node root;
private class Node {
E elem;
Node left, right;
Node (E elem) {
this.elem=elem;
}
}
public void add (E elem) {
root = add (root, elem);
}
private Node add (Node node, E elem) {
if (node == null) return new Node(elem);
int s = elem.compareTo(node.elem);
if (s<0) {
node.left = add(node.left, elem);
} else if (s>0) {
node.right = add(node.right, elem);
}
return node;
}
@Override
public Iterator<E> iterator() {
return new Iterator<E>() {
Node node;
this.node=node;
this.parent=parent;
}
}
{
put(root);
}
@Override
public boolean hasNext() {
return stack != null;
}
@Override
public E next() {
E res = stack.node.elem;
Node right = stack.node.right;
stack = stack.parent;
put(right);
return res;
}
void put (Node node) {
if (node != null) {
stack
= new Stack(node, stack
);
put(node.left);
}
}
};
}
@Override
public void forEach (Consumer<? super E> consumer) {forEach(root, consumer);}
private void forEach (Node node, Consumer<? super E> consumer) {
if (node != null) {
forEach(node.left, consumer);
consumer.accept(node.elem);
forEach(node.right, consumer);
}
}
@Override
AtomicReference<Boolean> firstTime= new AtomicReference<>(false);
StringBuilder s = new StringBuilder();
s.append('[');
forEach(e -> {
if (firstTime.get().booleanValue())
s.append(", ");
firstTime.set(true);
s.append(e);
});
s.append(']');
return s.toString();
}
}
int compareTo (T o);
}
public class Int implements Comparable<Int> {
int x;
Int (int x) {
this.x=x;
}
@Override
public int compareTo(Int o) {
return x - o.x;
}
@Override
}
}
import java.util.Iterator;
import java.util.function.Consumer;
public interface Iterable <E> {
Iterator<E> iterator();
void forEach(Consumer<? super E> consumer);
}
boolean hasNext ();
T next ();
}
public class Main {
public static void main
(String[] argv
) {
BST<Int> bst = new BST<>();
int[] a = {4, 7, 9, 3, 1};
for (int e : a)
bst.add(new Int(e));
/*for (int i : bst) {
}*/
}
}
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}