2012-03-13 136 views
4

我想要做一個huffman樹的編碼。我的樹是正確的。我只需要弄清楚如何修復我的遞歸函數以正確創建表格。感謝任何幫助,我可以收到。霍夫曼代碼編碼遍歷

struct Code 
{ 
    char letter; 
    string code; 
}; 

void createCode(BTree<Data>* root,string codeStr,vector<Code> &table) 
{ 
    if (root->getRightChild() == NULL && root->getLeftChild() == NULL) 
    { 
     Code code; 
     code.letter = root->getData().getLetter(); 
     code.code = codeStr; 
     table.push_back(code); 
    } 
    else 
    { 
     createCode(root->getLeftChild(), codeStr.append("1"),table); 
     createCode(root->getRightChild(), codeStr.append("0"),table); 
    } 
} 

回答

5

codeStr.append修改codeStr。所以你正確傳遞codeStr + "1"到第一次遞歸調用,但codeStr + "10"第二。因此,所有出現的「0」都由一個附加的「1」前綴。

嘗試

createCode(root->getLeftChild(), codeStr + "1",table); 
createCode(root->getRightChild(), codeStr + "0",table); 
+0

哇!謝謝。我不敢相信這很簡單。有用 – user1266174 2012-03-13 10:46:56