Skip to content
Snippets Groups Projects
Commit b95e12e9 authored by Viktor Kuncak's avatar Viktor Kuncak
Browse files

redblack with size

parent 89629bdf
Branches
Tags
No related merge requests found
......@@ -44,6 +44,11 @@ object ListWithSize {
append(l, Nil()) == l
} ensuring(_ == true)
@induct
def allListsAreEmpty(l : List) : Boolean = {
allListsAreEmpty(l) && (l == Nil())
} ensuring (_ == true)
def propAppend2(l : List) : Boolean = (l match {
case Nil() => propAppend1(l)
case Cons(x,xs) => (!propAppend1(xs) || propAppend1(l))
......
......@@ -15,13 +15,20 @@ object RedBlackTree {
case Node(_, l, v, r) => content(l) ++ Set(v) ++ content(r)
}
def size(t : Tree) : Int = t match {
case Empty() => 0
case Node(_, l, v, r) => size(l) + 1 + size(r)
}
def ins(x : Int, t: Tree): Tree = (t match {
case Empty() => Node(Red(),Empty(),x,Empty())
case Node(c,a,y,b) =>
if (x < y) balance(c, ins(x, a), y, b)
else if (x == y) Node(c,a,y,b)
else balance(c,a,y,ins(x, b))
}) ensuring (content(_) == content(t) ++ Set(x))
}) ensuring (res =>
content(res) == content(t) ++ Set(x) &&
size(t) <= size(res) && size(res) < size(t) + 2)
def add(x: Int, t: Tree): Tree = {
makeBlack(ins(x, t))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment