Я ничего не знаю о 2-3-4 деревьях, но для узла Три вы бы начали что-то вроде этого:
addNode t (Three x y left mid right)
| cond1 = expr1
| cond2 = expr2
(etc)
Что такое cond1
, cond2
, expr1
и expr2
, точно зависит от определения того, что такое дерево 2-3-4.
Что касается show
метода, общая схема будет такой:
instance (Show t) => Show (Tree t) where
show Empty = ...
show (Two x l r) = ...show x...show l...show r...
show (Three x y l m r) = ...
show (Four x y z l m n r) = ...
Реализация зависит от того, как вы хотите, чтобы она выглядела, но для непустых случаев вы, вероятно, вызовете show
для всех компонентов отображаемого дерева. Если вы хотите сделать отступ для вложенных частей дерева, возможно, вам следует создать отдельный метод:
instance (Show t) => Show (Tree t) where
show = showTree 0
showTree :: Show t => Int -> Tree t -> String
showTree n = indent . go
where indent = (replicate n ' ' ++)
go Empty = "Empty"
go (Two x l r) = (...show x...showTree (n+1) l...showTree (n+1) r...)
(etc)