增加红黑树

This commit is contained in:
Sanchime 2022-08-14 17:04:45 +08:00
parent 9991add633
commit c568d79eef
1 changed files with 21 additions and 2 deletions

View File

@ -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