霍夫曼編碼c++實現
阿新 • • 發佈:2019-02-14
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;
}
}
}
演算法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;
}