我建造了一棵用于霍夫曼压缩的树。我想遍历这棵树从根到叶的所有叶子。沿着这些遍历,如果采用左路径,我想存储0,如果采用正确路径,则存储1。我的代码适用于最左边的叶子,但是当它应该存储其兄弟的路径时,它只返回到父节点而不是根节点,然后向右移动并仅存储1而不是01.
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
如何更改我的代码,以便函数每次遍历树从根到另一个叶子(直到所有叶子都被访问过)。