1. 程式人生 > >霍夫曼編碼c++實現

霍夫曼編碼c++實現

        exit(0);
    }
    
}

演算法2:編碼演算法 //////////////////////////
//編碼
//value 代編碼的權值
//tree 霍夫曼樹
//code 編碼結果(01串)
bool Coding(int value,const BinaryTree<int>& tree,char* code)
{
    BinTreeNode<int>* currnode=tree.GetRoot();  /遍歷整個樹,指向每一個節點
    stack<BinTreeNode<int>* > stck;                     //遍歷樹時,存放樹節點指標的棧
    int index_code=0;                                                //結果陣列的棧頂
    
    while(currnode!=NULL || !stck.empty()){

        //訪問currnode->data後,將currnode入棧,遍歷左子樹
        while(currnode!=NULL){
            //cout<<code<<endl;
            //若數值與value相同,則返回true
            if(value==currnode->GetData())
                return true;

            stck.push(currnode);                                 //currnode入棧
            currnode=currnode->GetLeft();                 //currnode指向它的右孩子

            if(currnode!=NULL)
                code[index_code++]='0';                        //入棧,棧頂加1
        }

        //currnode指向空時,退棧,並讓currnode指向當前節點的右孩子
        if(!stck.empty()){
            currnode=stck.top();            
            stck.pop();
            currnode=currnode->GetRight();

            if(currnode!=NULL){
                index_code--;                                        //出棧
                code[index_code++]='1';                      //入棧,棧頂加1    
            }
        }    
    }
    
    return false;
    
}