[英]Build a huffman tree from a code table
我對如何從代碼表構建霍夫曼樹感到困惑。 代碼表由兩列組成,字符串代碼(二進制表示)和symb(十六進制值)
symbCode結構:
struct symbCode
{
char symb;
string code; //string of '0' and '1'
};
功能:
void huffmanTree::buildTreeFromCodeTable(symbCode *table, int n)
{
//construct the Huffman tree from the code table
//n = number of symbols in the code table
}
我在Google上搜索了一些提供霍夫曼樹教程的網站。 但我仍然無法弄清楚。 我應該新建一個樹節點還是做其他事情?
參考表:
Num_Alphabet 96
ASCII Huffman_Code
a 011000
20 0100
21 11101110110
22 1110111010
23 11101111000
24 11101111001
25 11110100001
26 0000010000
27 0000010001
28 100100100
29 100100101
2a 000000100
2b 000000101
2c 0110010
2d 101101000
2e 1110010
2f 0000000110
30 11110101
31 11110110
32 11110111
33 11111010
34 11111011
35 11111100
36 11111101
37 11111110
38 11111111
39 0000011
3a 101101001
3b 01100110
3c 000001001
3d 00000011
3e 000000000
3f 01100111
40 0000000111
41 00011
42 1110011
43 001010
44 011010
45 01010
46 001000
47 1110110
48 1001000
49 10101
4a 0010011
4b 1000001
4c 011111
4d 100001
4e 010110
4f 00010
50 1111100
51 00000101
52 010111
53 10100
54 110000
55 110011
56 10010011
57 100000010
58 000000001
59 10110101
5a 000000010
5b 11101111100
5c 11101111101
5d 11101111110
5e 11101111111
5f 11101110010
60 11101110011
61 10001
62 100101
63 110001
64 110010
65 10011
66 101111
67 101100
68 011110
69 11010
6a 001011
6b 011011
6c 111100
6d 00001
6e 111010
6f 01110
70 101110
71 111101001
72 111000
73 11011
74 00110
75 00111
76 0010010
77 10000000
78 100000011
79 1011011
7a 1111010001
7b 1110111101
7c 11110100000
7d 1110111000
7e 11101110111
使用二叉樹,對於每個節點,您都有兩條路徑:左子節點和右子節點。 左子節點表示0,右子節點表示1。在整棵樹完成之后,從根到葉節點,路徑(1s和0s的順序)是葉節點中值的代碼。
因此,表中的每個代碼實際上都是從根到葉的路徑。 一一挑選代碼,檢查從根開始的路徑(和從左開始的代碼),如果不存在,則創建所有節點(包括葉子); 如果部分存在(代碼中的左數相同),請完成通往葉子的路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.