Задача 4.5. Двоичное дерево задано следующим описанием тина.
data Tree, а = Null | Tree a (Tree a) (Tree a).
т.е. дерево может быть пустым или иметь корневую вершину, содержащую некоторое значение, и два поддерева с вершинами того же типа, что и корневая вершина. Требуется написать функцию, которая удаляет заданное значение из дерева поиска. Если такого значения в дереве не было, то дерево должно остаться неизменным.
Задача 4.6. Ориентированный граф задан списками смежности (см. задачу 4.3). Напишите функцию, которая находит в графе цикл (замкнутый путь), если он там есть, и выдает список вершин, составляющих этот цикл.
Задача 4.7. Диаметром неориентированного графа называется максимальное из расстояний между какими-то двумя вершинами в графе. Напишите функцию, которая вычисляет диаметр заданного графа.
Задача 4.8. Двоичное дерево представляет двоичную кучу, если каждая вершина в этом дереве имеет значение, не большее, чем значения, лежащие в поддеревьях этой вершины. Напишите две функции, одна из которых добавляет в кучу новое значение, а вторая удаляет минимальный элемент кучи (корень дерева), сохраняя свойство кучи для оставшихся в дереве вершин.