2012-03-13 10 views
4

私はハフマンツリーの符号化をしようとしています。私の木は正しい。私はテーブルを適切に作成するために再帰関数を修正する方法を理解する必要があります。私が受け取ることができるどんな助けでもありがとう。ハフマン符号化のトラバーサル符号化

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.appendcodeStrを変更します。したがって、正しくcodeStr + "1"を最初の再帰呼び出しに渡しますが、codeStr + "10"を2番目の再帰呼び出しに渡しています。結果として、 "0"のすべての出現は、追加の "1"によって前に付加される。

うわー

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

をお試しください!ありがとう。私はそれが簡単だとは信じられません。できます – user1266174