Implement Rotation Functions

Implement the rebalance() Function

You must implement rebalance() function. rebalance() should, given a
subtree, rotate the subtree so that it is balanced. You should assume that the
subtree’s left and right children are both already balanced trees. The
node’s height should always be updated, even if no rotations are required.

Implement the insert() Function

You must implement the insert() function. insert() should add a node with
a key and value at the correct location in the tree, then rebalance
appropriately (while returning from each recursive function) to fix the tree’s
balance.

Implement the remove() Function

You must implement the remove() function. remove() should remove the node
with the specified key from the tree, then rebalance appropriately (while
returning from each recursive function) to fix the tree’s balance. You can
assume that the key exists in the tree. You may want to use the swap()
method.

To match the provided output (and grading scripts), you should use IOP (in
order predecessor) for removing a node with 2 children.

Testing Your Code

To test your code, compile using make:

make

Then run it with:

./testavl color

You will see that the output is colored — green means correct output, red
means incorrect output, and underlined red means expected output that was not
present. This mode is a bit experimental, and it might cause problems with your
own debugging output (or other problems in general). To turn it off, simply
leave off the “color” argument:

./testavl

You may also diff your solution with our expected output:

./testavl | diff -u - soln_testavl.out

Type [Escape] [:] [q] [a] [ENTER] to exit vimdiff.

Committing Your Code

Commit your code the usual way:

svn ci -m "lab_avl submission"

Grading Information:

The following files are used in grading:

avltree.cpp

avltree.h

All other files including any testing files you have added will not be used for
grading.