Remove() is called from the root of the tree, rather than the node to be removed. This is different from the previous assignment. The reason for this is that you need to work back up the path from the root to the removed node to rebalance the tree. Insert() now returns the new subtree rooted where the previous one was, as rotations may have changed the root.
Read the code for the precise differences.
Note that rotate does not implement an AVL tree; your program should not work the same way.
Create the template class as a separate project, not as part of your regular program. I suggest the following. Make a new directory, and make a new makefile, perhaps using the samples from the make tutorial. Copy avl.h, avl.C, and your source files to the new directory. Remove all the graphics server stuff from avl.h and avl.C, and convert to a template class.
Make a driver program (i.e. a main function) that implements your template with the STL string class. At a minimum, you should insert and remove some strings into your tree, printing out the state of the tree at interesting times, demonstrating rotations and AVL balancing. For more extra-credit, have the driver read in a file that specifies a sequence of insertions, deletions and tree print-outs.
In addition to your code, make a second README file, in your extra-credit directory, explaining how your driver works (including the format for the file read in, if your driver can read in a file), and also any problems you had doing the conversion to a template class. Also, how easy was it to strip out the graphics stuff from the AVL class I gave you? Should I have written it a different way?
This is a very open-ended extra-credit. To get the minimum extra-credit, you should have a working driver implementing an AVL tree with strings.