Зад.1. Да се напише функция maxSumPath, която приема за аргумент двоично дърво с числа във възлите и намира максималната сума на числата по някой път от корен до листо.
Зад.2. Да се напише функция prune, която по дадено двоично дърво t връща ново дърво t', което представлява t, в което всички листа са премахнати.
Зад.3. Да се напише функция bloom, която по дадено двоично дърво t връща ново дърво t', което представлява t, в което на всички листа са добавени по два наследника - нови листа. Стойността в тези нови листа да е същата, като в оригиналното листо, от което са излезли.
Зад.4. Да се дефинира тип BST, който да представлява двоично наредено дърво, съдържащо стойности от произволен тип във възлите си. Да се дефинират следните функции към него:
- bstinsert :: (Eq a, Ord a) => a -> BST a -> BST a - добавяне на стойност в дървото
- bstsearch :: (Eq a, Ord a) => a -> BST a -> Bool  - търсене на стойност в дървото
- bstvalues :: BST a -> [a]                         - получаване на списък със всички стойности в дървото
- bstsize :: BST a -> Integer                      - брой стойности, съдържани в дървото
Зад.5. Да се дефинира тип Map, който да представлява структурата от данни map, реализирана с двоично наредено дърво. Да се дефинират следните функции към нея:
- mapinsert :: (Eq k, Ord k) => k -> v -> Map k v -> Map k v - вмъкване на ключ със стойност в дървото. Ако стойност за този ключ съществува, нека тя да бъде заместена с новата.
- mapsearch :: (Eq k, Ord k) => k -> Map k v -> Maybe v -- (!) търсене на стойност по ключ в дървото (обърнете внимание на върнатия тип)


Последно модифициране: вторник, 17 януари 2017, 09:15