24 lines
581 B
OCaml
24 lines
581 B
OCaml
type color = R | B
|
|
|
|
type 'a rbtree = L | N of color * 'a rbtree * 'a * 'a rbtree
|
|
|
|
let balance = function
|
|
| B, N (R, N (R, a, x, b), y, c), z, d
|
|
| B, N (R, a, x, N (R, b, y, c)), z, d
|
|
| B, a, x, N (R, N (R, b, y, c), z, d)
|
|
| B, a, x, N (R, b, y, N (R, c, z, d)) ->
|
|
N (R, N (B, a, x, b), y, N (B, c, z, d))
|
|
| c, l, x, r ->
|
|
N (c, l, x, r)
|
|
|
|
let insert x t =
|
|
let rec ins = function
|
|
| L -> N (R, L, x, L)
|
|
| N (c, l, y, r) when x < y ->
|
|
balance (c, ins l, x, r)
|
|
| N (c, l, y, r) when x > y ->
|
|
balance (c, l, x, ins r)
|
|
| _ -> t
|
|
in
|
|
ins t
|