====== Třetí domácí úkol ======
Instance třídy **Node** reprezentuje kořen binárního stromu obsahujícího celá čísla. Vaším úkolem je naprogramovat metody **inorderIterator()**, **preorderIterator()**, **postorderIterator()**, které vrátí iterátory vracející prvky daného stromu v pořadí inorder, preorder resp. postorder. Jedna instance iterátoru smí v paměti alokovat maximálně konstantní prostor, tzn. paměťové nároky iterátoru nesmí růst s počtem uzlů v daném stromu. Specificky: nesmíte iterátory implementovat tak, že "přesypete" všechny prvky do již existující kolekce a vrátíte její iterátor. Samozřejmě také nesmíte modifikovat iterovaný strom.
**Pokud uzel od kterého získáte iterátor není kořenem celého stromu, prochází pouze podstrom jehož je kořenem**
//Průchod stromem typu preorder, inorder a postorder si nastudujte na [[http://datastructuresnotes.blogspot.cz/2009/02/binary-tree-traversal-preorder-inorder.html]] , případně [[http://cs.wikipedia.org/wiki/Strom_(datov%C3%A1_struktura)#Metody_proch.C3.A1zen.C3.AD_stromu]]//
Rozhraní CustomIterator neodevzdávejte, hodnotící systém je již obsahuje.
Všechny vaše třídy se musí nacházet v package **cz.cvut.k36.omo.hw.hw03**.
Odevzdávaný kód (tzn. třídu Node a třídy iterátorů - každou v samostatném .java souboru) zabalte do .zip archivu a odevzdejte do systému Brute. Celý projekt také uložte do svého gitlab repozitáře.
public interface CustomIterator {
public boolean hasNext();
public int next();
}
public class Node {
private final int contents;
private final Node left, right;
private Node parent;
public Node(int contents, Node left, Node right) {
this.contents = contents;
this.left = left;
if (left != null) left.parent = this;
this.right = right;
if (right != null) right.parent = this;
}
public CustomIterator preorderIterator() { ... }
public CustomIterator inorderIterator() { ... }
public CustomIterator postorderIterator() { ... }
}