A.4. Funkce pro práci se stromy

Obsah

A.4.1. Vyhledání maximální hodnoty ve stromu
A.4.2. Reprezentace aritmetického výrazu uživatelským datovým typem
A.4.3. Vyhodnocení výrazu ve stromové reprezentaci
A.4.4. Převod výrazu ve stromové reprezentaci na řetězec

A.4.1. Vyhledání maximální hodnoty ve stromu

Vytvořte funkci, která najde největší hodnotu uzlu v binárním stromu. Uvažujte různé definice datového typu „strom“.

A.4.2. Reprezentace aritmetického výrazu uživatelským datovým typem

Definujte datový typ Expr, reprezentující uzly abstraktního syntaktického stromu pro výraz s operátory Add (+), Sub (-), Mul (*), Div (/) a celočíselnými konstantami Num jako operandy.

A.4.3. Vyhodnocení výrazu ve stromové reprezentaci

Vytvořte funkci, která provede vyhodnocení výrazu zapsaného ve formě abstraktního syntaktického stromu z předchozí úlohy. Pro testování použijte například následující výrazy:

> ex1, ex2, ex3:: Expr
> ex1 = Add (Mul (Num 2) (Num 3)) (Num 5)  -- 2 * 3 + 5
> ex2 = Add (Num 2) (Mul (Num 3) (Num 5))  -- 2 + 3 * 5
> ex3 = Mul (Add (Num 2) (Num 3)) (Num 5)  -- (2 + 3) * 5
> ex4 = Add (Add (Num 2) (Num 3)) (Num 5)  -- 2 + 3 + 5
> ex5 = Add (Num 2) (Add (Num 3) (Num 5))  --  2 + (3 + 5)
> ex6 = Div (Num 5) (Sub (Num 3) (Num 3))  -- 5 / (3 - 3) = error

A.4.4. Převod výrazu ve stromové reprezentaci na řetězec

Vytvořte funkci, která pro zadaný abstraktní syntaktický strom výrazu vrátí řetězec, reprezentující textový zápis výrazu. Pokuste se najít takové řešení, které generuje pouze nezbytné závorky ve výrazu.