Я хотел реализовать 2 кода, один для самого большого преемника x и один для самого маленького предшественника x в двоичном дереве.Преемник и преемник в двоичном дереве
data LookupTree a = Blatt | Knoten a (LookupTree a) (LookupTree a)
biggestSucc :: Ord a => a -> LookupTree a -> Int
biggestSucc x Blatt = error "Am Knoten"
biggestSucc x (Knoten a l r)
|a == x = max l r
|a /= x = biggestSucc x _
smallestPre :: Ord a => a -> LookupTree a -> Int
smallestPre x Blatt = error "Am Knoten"
smallestPre x (Knoten a l r)
|a == x =
|a /= x = smallestPre x _
Проблема заключается функция max
и min
и smallestPre
/biggestSucc x _
вещь. Но как еще я могу сказать ему идти в обоих направлениях узла? Благодаря!
Вы не хотите делать что-то вроде проверки < x or if a > x и рекурсии по левому дереву или дереву справа на основе этих проверок? – ErikR
Что значит преемник и предшественник? –
Приведите примеры, для чего он должен возвращаться, для какого входа? Вызывается 'LookupTree', например. левое поддерево должно быть меньше правого? (Не просто ответьте * да *, * меньше * неопределенно.) – Franky