Advertisement
Vladi1442

Untitled

Jul 1st, 2022
483
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. main :: IO()
  2. main = do
  3.     print $ numberBTree
  4.     print $ charBTree
  5.    
  6.     print $ size numberBTree == 9
  7.     print $ size charBTree == 7
  8.    
  9.     print $ sumTree numberBTree == 146
  10.     print $ sumTree charBTree -- should not work
  11.    
  12.     print $ traverseDFS numberBTree == [96, 1, 12, 0, 5, 2, 4, 5, 21]
  13.     print $ traverseDFS charBTree == "haskell"
  14.    
  15.     print $ getLevel numberBTree 2 == [1, 0, 2, 5]
  16.     print $ getLevel charBTree 1 == "al"
  17.     print $ getLevel charBTree 3 == []
  18.    
  19.     print $ traverseBFS numberBTree == [5,12,4,1,0,2,5,96,21]
  20.     print $ traverseBFS charBTree == "kalhsel"
  21.  
  22.     print $ mapTree numberBTree (*2) == Node 10 (Node 24 (Node 2 (Node 192 Nil Nil) Nil) (Node 0 Nil Nil)) (Node 8 (Node 4 Nil Nil) (Node 10 Nil (Node 42 Nil Nil)))
  23.     print $ mapTree numberBTree (show) == Node "5" (Node "12" (Node "1" (Node "96" Nil Nil) Nil) (Node "0" Nil Nil)) (Node "4" (Node "2" Nil Nil) (Node "5" Nil (Node "21" Nil Nil)))
  24.     print $ mapTree charBTree (toUpper) == Node 'K' (Node 'A' (Node 'H' Nil Nil) (Node 'S' Nil Nil)) (Node 'L' (Node 'E' Nil Nil) (Node 'L' Nil Nil))
  25.  
  26. data BTree a = Empty | Node a (BTree a) (BTree a)
  27.     deriving (Show, Eq)
  28.  
  29. numberBTree :: BTree Int
  30. numberBTree = Node 5 (Node 12 (Node 1 (Node 96 Empty Empty)) (Node 0 Empty Empty)) (Node 4 (Node 2 Empty Empty) (Node 5 Empty (Node 21 Empty Empty)))
  31.  
  32. charBTree :: BTree Char
  33. charBTree = Node 'k' (Node 'a' (Node 'h' Empty Empty) (Node 's' Empty Empty)) (Node 'l' (Node 'e' Empty Empty) (NOde 'l' Empty Empty))
  34.  
  35. size :: (Ord a) => BTree a -> a
  36. size Empty = 0
  37. size (Node value Empty Empty) = 1
  38. size (Node value left Empty) = 1 + (size left)
  39. size (Node value Empty right) = 1 + (size right)
  40. size (Node value left right) = 1 + (size left) + (size right)
  41.  
  42. sumTree :: (Ord a) => BTree a -> a
  43. sumTree Empty = 0
  44. sumTree (Node value Empty Empty) = value
  45. sumTree (Node value left Empty) = value + (sumTree left)
  46. sumTree (Node value Empty right) = value + (sumTree right)
  47. sumTree (Node value left right) = value + (sumTree left) + (sumTree right)
  48.  
  49. traverseDFS :: (Ord a) => (BTree a) -> [a]
  50. traverseDFS Empty = []
  51. traverseDFS (Node value Empty Empty) = [value]
  52. traverseDFS (Node value left right) = (traverseDFS left) ++ [value] ++ (traverseDFS right)
  53.  
  54. getLevel :: (Ord a) => (BTree a) -> [a]
  55. getLevel (Node value Empty Empty) 0 = [value]
  56. getLevel (Node value left right) k = getLevel left (k-1) ++ getLevel right (k-1)
  57.  
  58. -- first way for traverseBFS
  59.  
  60. traverseBFS :: (Ord a) => BTree a -> a
  61. traverseBFS t = concat $ takeWhile (/=[]) $ map (getLevel t) [0 .. ]
  62.  
  63. traverseBFS' :: (Ord a) => BTree a -> a
  64. traverseBFS' tree = bfs[tree]
  65.     where
  66.         bfs :: [a] -> [a]
  67.         bfs xs = map Nodevalue xs + bfs (leftAndRightNodes xs)
  68.        
  69.         Nodevalue :: BTree a -> a
  70.         Nodevalue (Node value _ _) = value
  71.        
  72.         leftAndRightNodes :: BTree a -> [a]
  73.         leftAndRightNodes (Node value left Empty) = [left]
  74.         leftAndRightNodes (Node value Empty right) = [right]
  75.         leftAndRightNodes (Node value left right) = [left,right]
  76.        
  77. mapTree :: (Ord a) => (BTree a) -> (a -> a) -> (BTree a)
  78. mapTree Empty _ = Empty
  79. mapTree (Node value left right) f = Node (f value) (f left) (f right)
  80.  
  81. data BTree a = Empty | Node a (BTree a) (BTree a)
  82.     deriving (Show, Eq)
  83.  
  84. t :: BTree Int
  85. t = Node 6 (Node 3 Empty (Node 2 Empty (Node 1 Empty Empty))) (Node 5 (Node 0 Empty Empty) Empty)
  86.  
  87. constructMaxBTree :: [a] -> BTree a
  88. constructMaxBTree xs = Node m (constructMaxBTree $ takeWhile (/=m) xs) (constructMaxBTree $ tail $ takeWhile (/=m) xs)
  89.  
  90. numberTreeBefore :: BTree Int
  91. numberTreeBefore = Node 10 (Node 5 (Node 3 Empty Empty) (Node 7 Empty Empty)) (Node 15 Empty (Node 18 Empty Empty))
  92.  
  93. numberTreeAfter :: BTree Int
  94. numberTreeAfter = foldl Empty [10,5,15,3,7,18]
  95.  
  96. secondNumberTree :: BTree Int
  97. secondNumberTree = foldl Empty [10,5,15,3,7,13,18,1,6]
  98.  
  99. insert :: (Ord a) => BTree a -> a -> [a]
  100. insert (Node value Empty Empty) 0 = [value]
  101. insert (Node value Empty Empty) k
  102.     | k > value = Node value left (right k)
  103.     | otherwise = Node value (left k) right
  104.  
  105.  
  106. t3 :: BTree
  107. t3 = Node 8 (Node 3 (Node 1 Nil Nil) (Node 6 (Node 4 Nil Nil) (Node 7 Nil Nil))) (Node 10 Nil (Node 14 (Node 13 Nil Nil) Nil))
  108.  
  109. t4 :: BTree
  110. t4 = Node 8 (Node 3 (Node 5 Nil Nil) (Node 6 Nil Nil)) (Node 10 Nil (Node 14 Nil Nil))
  111.  
  112. t5 :: BTree
  113. t5 = Node 8 (Node 3 (Node 2 Nil Nil) (Node 6 Nil Nil)) (Node 10 Nil (Node 1 Nil Nil))
  114.  
  115. t6 :: BTree
  116. t6 = Node 8 (Node 3 (Node 1 Nil Nil) (Node 4 Nil Nil)) (Node 10 (Node 5 Nil Nil) Nil)
  117.  
  118. traverseDFS' :: (Ord a) => BTree a -> [a]
  119. traverseDFS' (Node value Empty Empty) = [value]
  120. traverseDFS' (Node value left right) = (traverseDFS' left) ++ [value] ++ (traverseDFS' right)
  121.  
  122. isBinarySearchTree :: (Ord a) => BTree a -> Bool
  123. isBinarySearchTree t = nodes == sort nodes
  124.    where nodes = traverseDFS' t
  125.  
  126.  
  127. isSymetric :: (Ord a) => BTree a -> Bool
  128. isSymetric Empty = True
  129. isSymetric (Node value left right) = (traverseDFS left) == (reverse $ traverseDFS right)
  130.  
  131. data NTree a = Empty | Node a [(NTree a)]
  132.  
  133. -- t1 :: NTree Int
  134. -- t1 = Node 10 [Node 10 [Node 10 [Empty], Node 8 [Node 10 [Empty]], Node 2 [Empty]], Node 10 [Node 11 [Empty], Node 10 [Empty], Node 8 [Empty]]]
  135.  
  136. t :: NTree Int
  137. t = Node 10 [Node 3 [Node 5 [Empty], Node 8 [Node 1 [Empty], Node 2 [Empty]], Node 9 [Empty]], Node 7 [Node 11 [Empty], Node 13 [Empty]], Node 12 [Node 6 [Empty], Node 4 [Empty]]]
  138.  
  139. size :: NTree a -> a
  140. size Empty = 0
  141. size (Node value _) = 1
  142. size (Node _ children) = 1 + (sum $ map size children)
  143.  
  144. getLevel :: NTree a -> a -> [a]
  145. getLevel Empty _ = []
  146. getLevel (Node value _) 0 = [value]
  147. getLevel (Node value children) k = getLevel (\c -> getLevel c (k-1)) children
  148.  
  149.  
  150.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement