存储从树的根到叶的1&0和0的路径(霍夫曼编码)

时间:2015-11-03 21:59:31

标签: c path tree traversal huffman-code

我建造了一棵用于霍夫曼压缩的树。我想遍历这棵树从根到叶的所有叶子。沿着这些遍历,如果采用左路径,我想存储0,如果采用正确路径,则存储1。我的代码适用于最左边的叶子,但是当它应该存储其兄弟的路径时,它只返回到父节点而不是根节点,然后向右移动并仅存储1而不是01.

tree

132 void printArr(){
133   int i;
134   for(i=0; i<top; i++){
135     printf("%d\n", arr[i]);
136   }
137   printf("\n");
138 }
139 
140 void storeCode(Node *rootNode){
141   
142   if(rootNode->left){
143     arr[top] = 0;
144     top += 1;
145     storeCode(rootNode->left);
146   } 
147   if(rootNode->right){
148     arr[top] = 1;
149     top += 1;
150     storeCode(rootNode->right);
151   } 
152   if(isLeafNode(rootNode)){
153     arr[top] = rootNode->data;
154     top += 1;
155     return;
156   } 
157   
158 }

结果如下所示(非0或1数字是字符):

0 0 103 1 111 1 0 0 115 1 32 1 0 0 101 1 104 1 0 112 1 114

结果应如下所示:

0 0 103 0 1 111 1 0 0 115 1 0 1 32 1 1 0 0 101 1 1 0 1 104 1 1 1 0 112 1 1 1 1 114

如何更改我的代码,以便函数每次遍历树从根到另一个叶子(直到所有叶子都被访问过)。

0 个答案:

没有答案