Wirklich neu zu Haskell und ich kann das nicht herausfinden. Wie überprüfe ich, ob ein Node
in einem gegebenen Binärbaum größer ist als seine Kinder?Haskell Binärbaum Prädikat für genetische Sortierung
module IntTree where
data IntTree = Leaf Int
| Node Int IntTree IntTree
deriving (Eq,Show)
t1 :: IntTree
t1 = Node 1999 (Node 1963 (Leaf 1925)
(Leaf 1933))
(Node 1956 (Leaf 1932)
(Leaf 1924))
t2 :: IntTree
t2 = Node 1999 (Node 1922 (Leaf 1925)
(Leaf 1933))
(Node 1956 (Leaf 1932)
(Leaf 1924))
descendingTree :: Ord a => IntTree -> Bool
Die Funktion descendingTree
, die ein IntTree
bekommen und gibt mir einen Booleschen im Gegenzug, Signalisierung, ob es für jeden Knoten im Baum, dass der Knoten Wert ist größer als seine beiden Kinder Knoten Werte wahr ist; wenn es natürlich Kinder hat. Wie kann ich diese Funktion schreiben?
Meinten Sie haben 'data Tree a = Leaf a | Knoten (Baum a) a (Baum a) '? Sonst macht die Einschränkung "Ord a" auf "absteigend" keinen Sinn. Wie auch immer, was hast du schon probiert? Ich gebe Ihnen einen Hinweis und sage, dass, wenn Sie überprüfen, ob ein Knoten größer als alle seine Kinder ist, der Wert dieses Knotens das Maximum von ihm und allen seinen Kindern ist. Überprüfen Sie daher beim Überprüfen eines Knotens beide Unterbäume und führen Sie dann Vergleiche zwischen den Werten an den Wurzeln der Unterbäume und dem aktuellen Knoten selbst durch. – HTNW
Was ist Ihre Frage? –
Eine schöne und effiziente Art, einen Binärbaum zu sortieren, wäre möglicherweise der Typ "Zipper". Ich würde dir raten, einen Blick auf [Zippers] (http://learnyouahaskell.com/zippers) zu werfen – Redu