Dělal jsem to teďka cvičně a celkem to, s pužitím manuálu, šlo..
struktura pro uzel stromu (left,right,up,value,ch) + funktor/operátor < pro pointry na uzel
map uzlů indexovaná písmenky
priority_queue pointrů na uzel
načítat vstup po znacích (get), nové vkládat do mapy a zvyšovat číslo v uzlech v mapě. Pad naplnit forontu odkazy do mapy.
vybírat dva nejmenší uzly z fronty, vytvářet nový uzel (new) jako jejich rodič, ten vrátit do fronty. To celé dokud není ve frontě jeden uzel.
Tím máme hotový strom (kořen je ve frontě, listy v mapě).
vector<bool>, do něj procházením stromu od listů nacpat kódy všech znaků na vstupu.
Z toho vectoru brát osmice, z těch udělat char tak, že se osmice projde a k charu přičítá případné příslušné číslo z pole{1,2,4,8,16...128};
ten char šoupnout na výstup
Reprezentaci stromu jsem moc neřešil, udělal jem rekurzivní funkci, která ze stromu udělala "(podstrom)(podstrom)".
Měl jsem trable s tím, že fstream.get mi četlo i nějaké ukončovací znaky či co, prostě se tam zjevoval char s hodnotou -1. Vyřešil jsem to if(ch!=-1).
zdraví Vojta