Advertisement
Vladi1442

Untitled

Jul 3rd, 2022
459
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.  
  8.     print $ sumTree numberBTree == 146
  9.  
  10.     print $ traverseDFS numberBTree == [96, 1, 12, 0, 5, 2, 4, 5, 21]
  11.  
  12.     print $ traverseDFS numberBTree == [96, 1, 12, 0, 5, 2, 4, 5, 21]
  13.  
  14.     print $ getLevel numberBTree 2 == [1, 0, 2, 5]
  15.  
  16.     print $ mapTree numberBTree (*2) == Node 10 (Node 24 (Node 2 (Node 192 Empty Empty) Empty) (Node 0 Empty Empty)) (Node 8 (Node 4 Empty Empty) (Node 10 Empty (Node 42 Empty Empty)))
  17.  
  18.     print $ insert (Node 10 (Node 5 (Node 3 Nil Nil) (Node 7 Nil Nil)) (Node 15 Nil (Node 18 Nil Nil))) 13 == (Node 10 (Node 5 (Node 3 Nil Nil) (Node 7 Nil Nil)) (Node 15 (Node 13 Nil Nil) (Node 18 Nil Nil)))
  19.  
  20.     print $ (numberTreeAfter == numberTreeBefore) == True
  21.  
  22.     print $ secondNumberTree == Node 10 (Node 5 (Node 3 (Node 1 Nil Nil) Nil) (Node 7 (Node 6 Nil Nil) Nil)) (Node 15 (Node 13 Nil Nil) (Node 18 Nil Nil))
  23.  
  24.     print $ isBinarySearchTree t3 == True
  25.     print $ isBinarySearchTree t4 == False
  26.     print $ isBinarySearchTree t5 == False
  27.     print $ isBinarySearchTree t6 == False
  28.  
  29. data BTree a = Empty | Node a (BTree a) (BTree a)
  30.     deriving (Show, Eq)
  31.  
  32. -- first part
  33.  
  34. numberBTree :: BTree Int
  35. numberBTree = Node 5 (Node 12 (Node 1 (Node 96 Empty Empty) Empty) (Node 0 Empty Empty)) (Node 4 (Node 2 Empty Empty) (Node 5 Empty (Node 21 Empty Empty)))
  36.  
  37. charBTree :: BTree Char
  38. charBTree = Node 'k' (Node 'a' (Node 'h' Empty Empty) (Node 's' Empty Empty)) (Node 'l' (Node 'e' Empty Empty) (Node 'l' Empty Empty))
  39.  
  40. -- second part
  41.  
  42. size :: (Ord a, Num a) => BTree a -> a
  43. size (Node value Empty Empty) = 1
  44. size (Node value left Empty) = 1 + (size left)
  45. size (Node value Empty right) = 1 + (size right)
  46. size (Node value left right) = 1 + (size left) + (size right)
  47.  
  48. -- third part
  49.  
  50. sumTree :: (Ord a, Num a) => BTree a -> a
  51. sumTree Empty = 0
  52. sumTree (Node value Empty Empty) = value
  53. sumTree (Node value left Empty) = value + (sumTree left)
  54. sumTree (Node value Empty right) = value + (sumTree right)
  55. sumTree (Node value left right) = value + (sumTree left) + (sumTree right)
  56.  
  57. -- forth part
  58.  
  59. traverseDFS :: (Ord a, Num a) => BTree a -> [a]
  60. traverseDFS Empty = []
  61. traverseDFS (Node value Empty Empty) = [value]
  62. traverseDFS (Node value left Empty) = (traverseDFS left) ++ [value]
  63. traverseDFS (Node value Empty right) = [value] ++ (traverseDFS right)
  64. traverseDFS (Node value left right) = (traverseDFS left) ++ [value] ++ (traverseDFS right)
  65.  
  66. -- fifth part
  67.  
  68. traverseBFS :: (Ord a, Num a) => BTree a -> [a]
  69. traverseBFS tree = tbf [tree]
  70.     where
  71.         tbf :: [Int] -> [Int]
  72.         tbf [] = []
  73.         tbf xs = map nodeValue xs ++ tbf (concat (map leftAndRightNodes xs))
  74.  
  75.         nodeValue :: (Ord a, Num a) => BTree a -> a
  76.         nodeValue (Node value _ _) = value
  77.  
  78.         leftAndRightNodes :: (Ord a, Num a) => BTree a -> [a]
  79.         leftAndRightNodes (Node _ Empty Empty) = []
  80.         leftAndRightNodes (Node _ left Empty) = [left]
  81.         leftAndRightNodes (Node _ Empty right) = [right]
  82.         leftAndRightNodes (Node _ left right) = [left, right]
  83.  
  84. -- second way for traverseBFS
  85.  
  86. traverseBFS' :: (Ord a, Num a) => BTree a -> [a]
  87. traverseBFS' t = concat $ takeWhile (/=[]) $ map (getLevel t) [0 .. ]
  88.  
  89. -- sixth part
  90.  
  91. getLevel :: (Ord a) => (BTree a) -> [a]
  92. getLevel (Node value Empty Empty) 0 = [value]
  93. getLevel (Node value left right) k = getLevel left (k - 1) ++ getLevel right (k-1)
  94.  
  95. -- seventh part
  96.  
  97. mapTree :: (Ord a) => (BTree a) -> BTree a
  98. mapTree Empty _ = Empty
  99. mapTree (Node value left right) = Node (f value) (f left) (f right)
  100.  
  101. -- second task
  102.  
  103. data BTree a = Empty | Node a (BTree a) (BTree a)
  104.     deriving (Show, Eq)
  105.  
  106. t1 :: BTree Int
  107. t1 = Node 6 (Node 3 Empty (Node 2 Empty (Node 1 Empty Empty))) (Node 5 (Node 0 Empty Empty) Empty)
  108.  
  109. constructMaxBTree :: (Ord a, Num a) => [a] -> BTree a
  110. constructMaxBTree xs = Node m (constructMaxBTree $ takeWhile (/=m) xs) (constructMaxBTree $ tail $ takeWhile (/=m) xs)
  111.     where m = maximum xs
  112.  
  113. -- third task
  114.  
  115. data BTree a = Empty | Node a (BTree a) (BTree a)
  116.     deriving (Show, Eq)
  117.  
  118. numberTreeBefore :: BTree Int
  119. numberTreeBefore = Node 10 (Node 5 (Node 3 Empty Empty) (Node 7 Empty Empty)) (Node 15 Empty (Node 18 Empty Empty))
  120.  
  121. numberTreeAfter :: BTree Int
  122. numberTreeAfter = foldl insert Empty [10,5,15,3,7,18]
  123.  
  124. secondNumberTree :: BTree Int
  125. secondNumberTree = foldl insert [10,5,15,3,7,13,18,1,6]
  126.  
  127. insert :: (Ord a) => BTree a -> a -> BTree a
  128. insert Empty _ = Empty
  129. insert (Node value left right) k
  130.     | k > value = Node value left (right k)
  131.     | otherwise = Node value (left k) right
  132.  
  133. -- forth task
  134.  
  135. data BTree a = Empty | Node a (BTree a) (BTree a)
  136.     deriving (Show, Eq)
  137.  
  138. t3 :: BTree
  139. 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))
  140.  
  141. t4 :: BTree
  142. t4 = Node 8 (Node 3 (Node 5 Nil Nil) (Node 6 Nil Nil)) (Node 10 Nil (Node 14 Nil Nil))
  143.  
  144. t5 :: BTree
  145. t5 = Node 8 (Node 3 (Node 2 Nil Nil) (Node 6 Nil Nil)) (Node 10 Nil (Node 1 Nil Nil))
  146.  
  147. t6 :: BTree
  148. t6 = Node 8 (Node 3 (Node 1 Nil Nil) (Node 4 Nil Nil)) (Node 10 (Node 5 Nil Nil) Nil)
  149.  
  150. traverseDFS :: (Ord a) => (BTree a) -> [a]
  151. traverseDFS Empty = []
  152. traverseDFS (Node value left right) = (traverseDFS left) ++ [value] ++ (traverseDFS right)
  153.  
  154. isBinarySearchTree :: (Ord a) => (BTree a) -> Bool
  155. isBinarySearchTree t = nodes == sort nodes
  156.     where
  157.         nodes = traverseDFS t
  158.  
  159. -- is tree symetric
  160.  
  161. data BTree = Empty | Node Int BTree BTree
  162.     deriving (Show, Eq)
  163.  
  164. t1 :: BTree Int
  165. t1 = Node 1 (Node 2 Empty Empty) (Node 3 Empty Empty)
  166.  
  167. t2 :: BTree Int
  168. t2 = Node 1 (Node 2 (Node 3 Empty Empty) Empty) (Node 2 Empty (Node 3 Empty Empty))
  169.  
  170. t3 :: BTree Int
  171. t3 = Node 1 (Node 2 (Node 3 Empty Empty) (Node 7 (Node 5 Empty Empty) Empty)) (Node 2 (Node 7 Empty (Node 5 Empty Empty) (Node 3 Empty Empty)))
  172.  
  173. isSymetric :: (Ord a) => (BTree a) -> Bool
  174. isSymetric Empty = False
  175. isSymetric (Node value left right) = traverseDFS left == (reverse $ traverseDFS right)
  176.  
  177. traverseDFS :: (Ord a) => BTree a -> [a]
  178. traverseDFS Empty = []
  179. traverseDFS (Node value left right) = (traverseDFS left) ++ [value] ++ (traverseDFS right)
  180.  
  181.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement