Кореново дърво
==============

Ще използваме следната дефиниция на кореново дърво:
> Кореново дърво е списък
> (X, T<sub>1</sub>, T<sub>2</sub>, ..., T<sub>n</sub>), където:  
> * X е данна (корен)  
> * T<sub>1</sub>, T<sub>2</sub>, ..., T<sub>n</sub> са коренови дървета
> (поддървета), n ≥ 0

Файловете [tree.h](tree.h) и [tree.cpp](tree.cpp) съдържат
имплементацията на структурата от данни кореново дърво, която ще използваме
за решаване на задачи. Основните операции върху кореново дърво са:
* `Tree(x)` – създаване на дърво с корен `x`
* `add_child(t)` – добавяне на поддърво `t`
* `get_root()` – достъп до корена
* `get_children()` – достъп до поддърветата

Освен тях класът `Tree` има и следните два метода за обхождане:
* `prefix_print()` – префиксно обхождане (първо посещаваме корена, след това
обхождаме децата)
* `postfix_print()` – постфиксно обхождане (първо обхождаме децата, накрая
посещаваме корена)

Сума на листата
---------------
Листо на дърво е възел без деца.
Напишете функция, която намира сумата на листата на дадено кореново дърво.

[Решение](sum-leaves.cpp)

Широчина
--------
Широчина на дърво е максималният брой деца на възел.
Напишете функция, която намира широчината на дадено кореново дърво.

[Решение](breadth.cpp)

Add task descriptions for tree problems
Add task descriptions for tree problems
