www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheHaskell-Forum

Xan

Gepostet:
17.07.2012 10:36

Kinder bei Knoten des Binärbaums bestimmen  
[code
data BTree a = Nil | Node a (BTree a)
twoChildren :: BTree a -> Bool
twoChildren (Node n)
|(Node n) = `mod` n 2 == 0 =True
|otherwise = Nill
][
/code]
meine Funktion soll entscheiden ob jeder Knoten des Binärbaums genau zwei Kinder hat oder nicht.
Aber irgenbdwie komme ich mit der Schreibweise des Codes nicht klar.
Zum Seitenanfang    
 
IKT

Gepostet:
17.07.2012 21:12

   
Bei deinem Baum kann ein Knoten gar keine 2 Kinder haben, meintest du eventuell:
data BTree a = Nil | Node a (BTree a)  (BTree a)
?

ohne es ausprobiert zu haben, müsste es das jenes erledigen:
Annahme: Blätter sind die jenigen Zahlen, die 2 Nills dranhängen haben, Knoten alles andere


twoChildren :: BTree a -> Bool
twoChildren Nill = True
twoChildren Node _ Nill (Node _ _ _) = False
twoChildren Node _ (Node _ _ _) Nill = False
twoChildren Node _ teilbaum1 teilbaum2 = twoChildren teilbaum1 && twoChildren teilbaum2



two Children nimmt einen Typ \\\"BTree\\\", also muss du auch dagegen matchen. Entweder \\\"Nill\\\", oder etwas der Forum \\\"Node a (BTree a) (BTree a)\\\" wobei du auch hierbei wieder \\\"BTree a\\\" durch Node .... ersetzen kann, sowie ich es in der 2. und 3. zeile mache, um zu überprüfen, ob (genau) ein Teilbaum Links oder Rechts vorliegt: (Node _ _ _). Ich hätte auch einfach \\\"baum\\\" stattdessen schreiben können, allerdings wüsste ich dann nicht, ob der Nill ist oder (Node .... )

Hoffe das hilft erstmal, hab grad nicht so viel Zeit. :)
Zum Seitenanfang    
 
Xan

Gepostet:
18.07.2012 20:13

   
Vielen Dank
Zum Seitenanfang