Exemple #1
0
 HuffmanTree::HuffmanTree()
 {
     MinHeap<HufTreeNodePtr> M;
     int calcu[26]={0};//0->a
     HufTreeNode *p;
     HufTreeNodePtr ptr;
     char c[100];
     cout<<"请输入以#结尾的一串小写英文序列"<<endl;
     cin>>c;
     int i=0;
     while (c[i]!='#')
     {
         calcu[c[i]-'a']++;
         i++;
     }
     for (int i=0;i<26;i++)
     {
         if (calcu[i]==0) continue;
         cout<<calcu[i]<<' '<<(char)('a'+i)<<endl;/////////////////////////////////
         p=new HufTreeNode(calcu[i],'a'+i);
         ptr.p=p;
         M.Put(ptr);
     }
     HufTreeNodePtr ptra,ptrb;
     while (M.Length()>1)
     {
         ptrb=M.Remove();
         ptra=M.Remove();
         ptr.p=new HufTreeNode(ptra.p->weight+ptrb.p->weight);
         ptr.p->leftChild=ptra.p;
         ptr.p->rightChild=ptrb.p;
         M.Put(ptr);
     }
     root=M.Front().p;
 }