增加红黑树
This commit is contained in:
parent
9991add633
commit
c568d79eef
|
@ -5,5 +5,24 @@ module RedBlack =
|
|||
type Color = Red | Black
|
||||
|
||||
type RedBlackTree<'T> =
|
||||
| Node of Color * 'T RedBlackTree * 'T * 'T RedBlackTree
|
||||
| Leaf
|
||||
| Node of Color * Left: 'T RedBlackTree * Value: 'T * Right: 'T RedBlackTree
|
||||
| Leaf
|
||||
|
||||
let balance = function
|
||||
| Black, Node (Red, Node (Red, a, x, b), y, c), z, d
|
||||
| Black, Node (Red, a, x, Node (Red, b, y, c)), z, d
|
||||
| Black, a, x, Node (Red, Node (Red, b, y, c), z, d)
|
||||
| Black, a, x, Node (Red, b, y, Node (Red, c, z, d)) ->
|
||||
Node (Red, Node (Black, a, x, b), y, Node (Black, c, z, d))
|
||||
| a, b, c, d -> Node (a, b, c, d)
|
||||
|
||||
let insert x s =
|
||||
let rec loop = function
|
||||
| Leaf -> Node (Red, Leaf, x, Leaf)
|
||||
| Node (color, a, y, b) as s ->
|
||||
if x < y then balance (color, loop a, y, b)
|
||||
elif y < x then balance (color, a, y, loop b)
|
||||
else s
|
||||
|
||||
loop s
|
||||
|
Loading…
Reference in New Issue