Si desidera contare la profondità dall'alto e utilizzare i valori restituiti di minHeight per rilegare le altre chiamate.
minHeight :: Integer -> (Maybe Integer) -> Tree -> Integer
minHeight depth bound tree = ...
passano inizialmente in 0 come profondità e Nothing
come legato (aka Infinity
), le foglie tornare il più piccolo dei depth
e bound
, altrimenti vedere se si dispone di un insieme finito legato (Just b
) e confrontarlo con corrente depth
.
case b of
Just min -> if min <= depth then return min else RECURSION
otherwise -> RECURSION
Ogni volta che sei al computer alcune minHeight
in ricorsione, unire il suo risultato con la corrente bound
.
minHeight d min (Node _ t1 t2) =
let min1 = Just (minHeight (d + 1) min t1) in
(minHeight (d + 1) min1 t2)
Nota: indipendentemente dalla convenzione utilizzata, se si desidera essere coerenti, 'Empty' e' Node _ Empty Empty' non dovrebbero avere la stessa altezza. – Jubobs
@Jubobs si, modificato! –
Puoi modificare nella domanda cosa intendi per lunghezza_lunga e lunghezza corrente? – Franky