This assignment is to implement 2-3 Trees in Omega using Omega';s type
system to enforce the invariants of 2-3 trees.
See the following set of slides about 2-3 Trees I found on the web
as an introduction.
2-3 Trees have the follwoing invariants (taken from wikipedia with some of my own improvements).
- Every non-leaf is a 2-node or a 3-node. A 2-node contains one data item and
has two children. A 3-node contains two data items and has 3 children.
- All leaves are at the same level (the bottom level). This means the distance from a leaf to the root
is the same for all leaf nodes.
- All data is kept in sorted order.
- Leaf node will contain 1 or 2 data fields.
Here is a picture of a 2-3 tree.
As homework do the following
- Define an Omega generalized algebraic datatype to encode 2-3-Trees.
- Use type indexes to encode as many of the invariants as you can.
(You may leave out the sorted order invariant if you desire, but even this one is possible).
- Write an insert function that inserts an element and maintains the
index invaraints, thus maintaining the balance invariant of the tree.
Back to the Daily Record.