我正在實現一個函數,它需要一個樹和一個編碼的字符串。 例子:解碼霍夫曼樹
decode(*Huffmantree, "10010101010")
我想這個函數返回解碼字符串輸入相對於哈夫曼樹輸入編碼字符串。
的代碼,我到目前爲止有:
string decode(NodePtr root, string encoded_str)
{
string temp = "";
for (int i = 0 ; i < encoded_str.size() ; i++)
{
if (root->is_leaf() == true)
{
temp[i] = root->letter;
//cout << root->letter;
}
if (root->left != NULL)
{
encoded_str.
}
if(root->right != NULL)
{
}
}
return temp;
}
我有麻煩時實施向左或向右不爲空,也就是當我還得繼續到下一個節點會發生什麼。
有什麼建議嗎?
編輯:
string decode(NodePtr root, string encoded_str)
{
string temp = "";
int i;
for(i = 0 ; i < encoded_str.size() ; i++)
{
if(root == NULL)
{
cout<<"error in string"<<endl;
return temp;
//cout<<root->letter;
}
temp[i] = root->letter;
if(encoded_str[i] == '0')
{
root = root->left;
}
else
{
root = root->right;
}
}
// for (int i = 0 ; i < temp.size(); i++)
// {
// cout<<temp[i];
// }
// cout<<endl;
temp[i]='/0';
return temp;
}
一個問題:assert函數..這是否意味着在這種情況下如果encoded_stri!= 1,它會終止? – user3265963
調試中使用'assert'(當'NDEBUG'未定義時]。如果條件失敗,則程序停止。如果需要,你可以使用其他/更好的錯誤檢查來確保'encoded_str'只包含'0'和'1'。 – Jarod42