6. balance
delta,ratio :: Int
delta = 5 -- 大 < delta * 小
ratio = 2 -- 回転がSingleかDoubleか決定
balance :: k -> a -> Map k a -> Map k a -> Map k a
balance k x l r
| sizeL + sizeR <= 1 = Bin sizeX k x l r
| sizeR >= delta*sizeL = rotateL k x l r
| sizeL >= delta*sizeR = rotateR k x l r
| otherwise = Bin sizeX k x l r
6
7. rotation
Single Rotation と Double Rotation の2つある
Singleのほうが効果大きい
rotateL :: a -> b -> Map a b -> Map a b -> Map a b
rotateL k x l r@(Bin _ _ _ ly ry)
| size ly < ratio*size ry = singleL k x l r
| otherwise = doubleL k x l r rotateL _ _ _ Tip =
error "rotateL Tip"
※lyとry は右木のSubtreeです
7