Guest User

Untitled

a guest
May 5th, 2013
30
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2.  
  3.  
  4.  
  5. balance :: BTree32 k a -> (k,a) -> BTree32 k a -> BTree32 k a
  6. balance l x r =if not (propbalan (Node (size l + size r +1) l x r)) then
  7.             if not (prop1 (Node (size l + size r +1) l x r)) then
  8.                 if size (subarbolizq r) <  2*(size(subarbolder r)) then
  9.                     singleL (Node (size l + size r +1) l x r)
  10.                 else
  11.                     doubleL (Node (size l + size r +1) l x r)
  12.             else if not (prop2 (Node (size l + size r +1) l x r)) then
  13.                 if size (subarbolizq l) < 2*(size(subarbolder l)) then
  14.                     singleR (Node (size l + size r +1) l x r)
  15.                 else
  16.                     doubleR (Node (size l + size r +1) l x r)
  17.             else
  18.                  Node (size l + size r + 1) l x r
  19.         else
  20.             Node (size l + size r +1 ) l x r
  21.  
  22.  
  23. singleL :: BTree32 k a -> BTree32 k a
  24. singleL Nil = Nil
  25. singleL (Node n aa (a1,a2) (Node m h (b1,b2) dd)) = Node n (Node (size aa + size h +1 ) aa (a1,a2) h)  (b1,b2) dd
  26.  
  27.  
  28. singleR :: BTree32 k a -> BTree32 k a
  29. singleR Nil = Nil
  30. singleR (Node n (Node m bb (b1,b2) h) (a1,a2) aa) = Node n bb (b1,b2) (Node (size aa + size h +1) h (a1,a2) aa)
  31.  
  32. doubleL :: BTree32 k a -> BTree32 k a
  33. doubleL Nil = Nil
  34. doubleL (Node n aa (a1,a2) (Node m (Node o bb (c1,c2) cc) (b1,b2) dd)) = Node n (Node (size aa + size bb + 1) aa (a1,a2) bb) (c1,c2) (Node (size cc + size dd +1) cc (b1,b2) dd)
  35.  
  36.  
  37. doubleR :: BTree32 k a -> BTree32 k a
  38. doubleR Nil = Nil
  39. doubleR (Node n (Node m bb (b1,b2) (Node o cc (c1,c2) dd)) (a1,a2) aa) = Node n (Node (size bb + size cc +1) bb (b1,b2) cc) (c1,c2) (Node (size dd + size aa +1) dd (a1,a2) aa)
  40.  
  41. prop1 :: BTree32 k a -> Bool
  42. prop1 Nil = True
  43. prop1 (Node n l (x,y) r) = if (size r <= 3*(size l)) then True else False
  44.  
  45. prop2 :: BTree32 k a -> Bool
  46. prop2 Nil = True
  47. prop2 (Node n l (x,y) r) = if (size l <= 3*(size r)) then True else False
  48.  
  49. prop3 :: BTree32 k a -> Bool
  50. prop3 Nil = True
  51. prop3 (Node n l (x,y) r ) = if (size l + size r <= 1) then True else False
  52.  
  53. propbalan :: BTree32 k a -> Bool
  54. propbalan b = if (prop1 b && prop2 b) || prop3 b then True else False
  55.  
  56. subarbolizq :: BTree32 k a -> BTree32 k a
  57. subarbolizq Nil = Nil
  58. subarbolizq (Node n l x r) = l
  59.  
  60. subarbolder :: BTree32 k a -> BTree32 k a
  61. subarbolder Nil = Nil
  62. subarbolder (Node n l x r) = r
Advertisement
Add Comment
Please, Sign In to add comment