Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- balance :: BTree32 k a -> (k,a) -> BTree32 k a -> BTree32 k a
- balance l x r =if not (propbalan (Node (size l + size r +1) l x r)) then
- if not (prop1 (Node (size l + size r +1) l x r)) then
- if size (subarbolizq r) < 2*(size(subarbolder r)) then
- singleL (Node (size l + size r +1) l x r)
- else
- doubleL (Node (size l + size r +1) l x r)
- else if not (prop2 (Node (size l + size r +1) l x r)) then
- if size (subarbolizq l) < 2*(size(subarbolder l)) then
- singleR (Node (size l + size r +1) l x r)
- else
- doubleR (Node (size l + size r +1) l x r)
- else
- Node (size l + size r + 1) l x r
- else
- Node (size l + size r +1 ) l x r
- singleL :: BTree32 k a -> BTree32 k a
- singleL Nil = Nil
- 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
- singleR :: BTree32 k a -> BTree32 k a
- singleR Nil = Nil
- 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)
- doubleL :: BTree32 k a -> BTree32 k a
- doubleL Nil = Nil
- 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)
- doubleR :: BTree32 k a -> BTree32 k a
- doubleR Nil = Nil
- 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)
- prop1 :: BTree32 k a -> Bool
- prop1 Nil = True
- prop1 (Node n l (x,y) r) = if (size r <= 3*(size l)) then True else False
- prop2 :: BTree32 k a -> Bool
- prop2 Nil = True
- prop2 (Node n l (x,y) r) = if (size l <= 3*(size r)) then True else False
- prop3 :: BTree32 k a -> Bool
- prop3 Nil = True
- prop3 (Node n l (x,y) r ) = if (size l + size r <= 1) then True else False
- propbalan :: BTree32 k a -> Bool
- propbalan b = if (prop1 b && prop2 b) || prop3 b then True else False
- subarbolizq :: BTree32 k a -> BTree32 k a
- subarbolizq Nil = Nil
- subarbolizq (Node n l x r) = l
- subarbolder :: BTree32 k a -> BTree32 k a
- subarbolder Nil = Nil
- subarbolder (Node n l x r) = r
Advertisement
Add Comment
Please, Sign In to add comment