Think of something that could account for a collection of a reasonal number of distinguishable namable objects preferably something that is of interest to you (your collection of CDs or MP3s or DVDs or books or stamps (does stamp collecting still exist?) or just about anything) and write a C++ program that maintains a catalogue of them as a binary tree. You will need an class/struct for the colliectable things, a class/struct for the tree nodes, and a class for the whole tree. The program should be able to: Read the collection from a text file and build the binary tree for it. Save the collection from the binary tree back to a text file. Search for an item in the collection, given something name-like to search for. Add a new item to the tree. About the text files: 1. Many collection items have compond names (more than one space separated word). The easiest way to handle this is to keep everything with its spaces while the program is running, but when writing to the file, replace all spaces with underlines, and when reading from a file, replace all underlines with spaces, so for example in the file: Across_the_Universe The_Beatles Let_it_Be 3 1970 in the treeable object: {"Across the Universe", "The Beatles", "Let it Be", 3, 1970} 2. If you create the file in the usual recursive way save_to_file(p->left); fout << p->... ... ...; save_to_file(p->right) you will be saving itels in alphabetical order, so when you read them back in, your tree will really be a linked list. So don't do it that way. If you re- arrange those statements something good happens. Work out what would be a good re-arrangement (there are only six possibilities including the original, and four of them are good, so it won't take long find out by experiment) and do it that way instead.