module ShowTrees ( Binbaum(Leer,Knoten), -- Binärbäume und ihre Konstruktoren showbinbaum, -- Anzeigen eines Binärbaums (mit terminierenden Leer's) ) where -- =============================================================== = -- Ausgabefunktionen für Binärbäume -- =============================================================== = -- Anzeige einfach polymorpher Binärbäume -- Zeigt die terminierenden leeren nicht Bäume an. data Binbaum a = Leer | Knoten (Binbaum a) a (Binbaum a) deriving (Show) showbinbaum :: (a->[Char]) -> Binbaum a -> IO() showbinbaum f t = putStr (showbaum f t 0) showbaum f Leer acc = "" showbaum f (Knoten l w r) acc = showbaum f r (acc+1) ++ tabs acc++" /\n"++tabs acc++f w++"\n"++tabs acc++" \\\n"++ showbaum f l (acc+1) -- =============================================================== = -- Hilfsfunktion tabs n = ['\t' | x<-[1..n]] -- =============================================================== = -- Testbäume baum1 = Knoten (Knoten Leer 3 Leer) 4 (Knoten Leer 5 Leer) baum2 = Knoten (Knoten Leer 8 Leer) 15 (Knoten Leer 25 Leer) baum3 = Knoten (Knoten baum1 6 Leer) 9 (Knoten Leer 11 baum2) baum4 = Knoten (Knoten Leer 9 Leer) 14 (Knoten (Knoten Leer 26 Leer) 39 (Knoten Leer 41 (Knoten Leer 55 Leer))) -- Tests t1 = showbinbaum show baum1; t2 = showbinbaum show baum2; t3 = showbinbaum show baum3; t4 = showbinbaum show baum4; hoehe::Binbaum a -> Int hoehe Leer = 0 hoehe (Knoten l w r) = 1 + max (hoehe l) (hoehe r)