====== Lab05 - Binární strom ======
Implementujte dodané {{:courses:b0b36pjv:hw:pjv-lab05.zip|interface}} ''Tree'' a ''Node'' třídami ''TreeImpl'' a ''NodeImpl''. Třída ''TreeImpl'' musí obsahovat defaultní konstruktor (bez parametrů). Metody a proměnné pojmenovávejte anglicky. Nepoužívejte javovské kolekce; potřebujete pouze pole, které dostanete jako parametr ''setTree''.
Implementované třídy ''TreeImpl'' a ''NodeImpl'' umístěte do stejného balíčku jako jsou dodané interfacy.
Tree reprezentuje [[http://en.wikipedia.org/wiki/Binary_tree|binární strom]], který ve všech uzlech obsahuje celočíselná data. Každý uzel stromu je reprezentován třídou implementující interface ''Node''. Tree obsahuje následující metody:
* ''void setTree(int[] values) ''
* nastaví strom, tak aby obsahoval hodnoty z pole values
* pokud je délka pole lichá, kořen obsahuje prostřední číslo, jinak obsahuje první číslo za polovinou posloupnosti
* levá část podstromu pak obsahuje prvky pole před tím prostředním prvkem a pravé prvky za ním
* obdobně to platí i pro podstromy
* ''Node getRoot()''
* vrátí kořen stromu
* ''String toString()''
* vrátí řetězcovou reprezentaci stromu vhodnou k výpisu v následujícím formátu
* každá hodnota je na jednom řádku, předchází ji počet mezer odpovídající hloubce uzlu (0 pro kořen) a '- '
* na prvním řádku je hodnota kořenu
* hodnotu uzlu následuje výpis levého podstromu a pak pravého podstromu
* každý řádek (vč. posledního) je ukončen novým řádkem ('\n')
* Příklad pro strom vytvořený pro pole [1, 2, 3, 4, 5, 6, 7]:
- 4
- 2
- 1
- 3
- 6
- 5
- 7
Ukázka výstupu metody ''toString'' pro stromy vytvořené z posloupností [1], [1, 2], ... , [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
- 1
- 2
- 1
- 2
- 1
- 3
- 3
- 2
- 1
- 4
- 3
- 2
- 1
- 5
- 4
- 4
- 2
- 1
- 3
- 6
- 5
- 4
- 2
- 1
- 3
- 6
- 5
- 7
- 5
- 3
- 2
- 1
- 4
- 7
- 6
- 8
- 5
- 3
- 2
- 1
- 4
- 8
- 7
- 6
- 9
- 6
- 3
- 2
- 1
- 5
- 4
- 9
- 8
- 7
- 10
Odevzdávejte následující soubory: ''NodeImpl.java'', ''TreeImpl.java''