私は再帰的に木を横断し、再帰を通して文字列を運ぼうとしています。
アイデアは(ハフマンコーディングの場合)、ルートから始めて、左に行く場合は0を文字列に連結し、右に行く場合は1を連結します。リーフに到達すると、最終的な文字列は0の文字列になります。そして1sはあなたの「エンコーディング」です。
これが私の関数です:
void encode_tree(bin_node *root, char *string)
{
if(root->left==NULL && root->right==NULL)
{
root->encoding = string;
printf("%d got an encoding of %s\n", root->data, root->encoding);
return;
}
root->encoding = string;
encode_tree(root->left, strcat(string, "0"));
encode_tree(root->right, strcat(string, "1"));
}
しかし、このコードは間違っています、それは私に間違ったエンコーディングを与えます。
私がこの木を持っているとしましょう:
3\65
6\-1
3\70
9\-1
2\66
3\-1
1\67
16\-1
7\68
7/86のエンコーディングは0、1 / 67は100、2 / 66は101、3/70は110、3/65は111である必要があります。
しかし、これが私の関数から得られるエンコーディングです:
7/68 got an encoding of 0
1/67 got an encoding of 0100
2/66 got an encoding of 01001
3/70 got an encoding of 0100110
3/65 got an encoding of 01001101