Advertisement
Guest User

Untitled

a guest
Jun 20th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.34 KB | None | 0 0
  1. module PopulatingNextRightPointers where
  2.  
  3. data BinaryTree a = Node a (BinaryTree a) (BinaryTree a) (BinaryTree a) | Nil deriving Show
  4.  
  5. -- 1
  6. -- / \
  7. -- 2 3
  8.  
  9.  
  10. test = Node 1 (Node 2 Nil Nil Nil) (Node 3 Nil Nil Nil) Nil
  11.  
  12. -- 1
  13. -- / \
  14. -- 2 3
  15. -- / \ / \
  16. -- 4. 56 7
  17. testone = Node 1 (Node 2 (Node 4 Nil Nil Nil) (Node 5 Nil Nil Nil) Nil) (Node 3 (Node 6 Nil Nil Nil) (Node 7 Nil Nil Nil) Nil) Nil
  18.  
  19. getRightMost:: BinaryTree a -> BinaryTree a
  20. getRightMost Nil = Nil
  21. getRightMost bt@(Node v l r n) = case l of
  22. Nil -> r
  23. _ -> l
  24.  
  25. modifyBTWithNext :: BinaryTree a -> BinaryTree a -> BinaryTree a
  26. modifyBTWithNext Nil _ = Nil
  27. modifyBTWithNext bt@(Node v l r n) next = case bt of
  28. Nil -> Nil
  29. Node vl ll rl nl -> Node vl ll rl next
  30.  
  31. connect:: BinaryTree a -> BinaryTree a
  32. connect Nil = Nil
  33. connect bt@(Node v l r n) = let newleft = case r of
  34. Nil -> modifyBTWithNext l (getRightMost n)
  35. _ -> modifyBTWithNext l r
  36. newright = modifyBTWithNext r (getRightMost n)
  37. in Node v (connect newleft) (connect newright) n
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement