Вы хотите подсчитать глубину сверху и использовать возвращаемые значения minHeight для привязки других вызовов.
minHeight :: Integer -> (Maybe Integer) -> Tree -> Integer
minHeight depth bound tree = ...
Первоначально проходит в 0, как глубина и Nothing
, как оценка (ака Infinity
), на листьях возвращают меньшее из depth
и bound
, в противном случае если у вас есть конечный предел (Just b
) и сравнить его с текущим depth
.
case b of
Just min -> if min <= depth then return min else RECURSION
otherwise -> RECURSION
Всякий раз, когда вы вычислить некоторые minHeight
в рекурсии, объединить свой результат с текущим bound
.
minHeight d min (Node _ t1 t2) =
let min1 = Just (minHeight (d + 1) min t1) in
(minHeight (d + 1) min1 t2)
Примечание: независимо от того, какое соглашение вы используете, если вы хотите быть последовательным, 'Empty' и' Node _ Empty Empty' не должны иметь одинаковую высоту. – Jubobs
@Jubobs да, отредактирован! –
Не могли бы вы внести изменения в вопрос, что вы подразумеваете под _length_ и _current_ length? – Franky