OK, the standard zip methods not bzip, but gzip) use some type of Lempel-Ziv Compression.
Here's how you do it (I've done the code in Java, though we were more interested in the tree for prediction than the compression):
Basically, you're building up a dictionary. adding on 1 word at a time. Each word consists of the number of a previous word in the dictionary and an additional character (suffix).
Decide on your alphabet (binary, ascii, or whatever).
Create a root node.
Go over your sequence letter by letter, moving down the tree appropriately as you do so, until you come to a leaf. Make the next entry in the dictionary as follows: the word number (stored in the leaf) and the next letter. Create a descendent for that leaf for the next letter and save its words number inside it. Reset back to the root, and repeat while you still have letters in the sequence.
I'm not sure if this will make it 100% compatable with WinZip, take a look at GZip to be absolutely sure. In Java, you can always use a GZipOutputStream to compress files (like I said, we were interested in the tree, and not the compression).