data Tree a = Tree a [Tree a] deriving (Show) replaceByMin2 :: Tree Int -> Tree Int replaceByMin2 t = r where m = minElem t -- najdi nejmenší prvek r = replaceBy m t -- a nahraď jím ostatní minElem :: Tree Int -> Int minElem (Tree r sons) = minimum (r : map minElem sons) -- minimum z kořene a minim synů replaceBy :: a -> Tree a -> Tree a replaceBy w (Tree r sons) = Tree w (map (replaceBy w) sons) -- nahraď hodnotu v kořeni a rekurzivně -- se zavolej na syny