/*通过递归遍历将Huffman树转换成Huffman表*/ void convertTreeToList(pNode root, pNode nodelist[]) { if (root) { /*只获取有效字符节点*/ if (root->type == NODE_TYPE_DATA) { nodelist[root->data] = root; } convertTreeToList(root->left, nodelist); convertTreeToList(root->right, nodelist); } }
时间: 2024-04-25 15:26:28 浏览: 46
这段代码是用来将Huffman树转换成Huffman表的。Huffman表是一个数组,下标对应字符的ASCII码,存储的是该字符的Huffman编码所对应的节点。这段代码使用了递归的方式,遍历了整棵Huffman树。对于每个有效字符节点,将其存入Huffman表中。最终得到的Huffman表可以用于对文本进行压缩和解压缩。
相关问题
/通过递归遍历将Huffman树转换成Huffman表/ void convertTreeToList(pNode root, pNode nodelist[]) { if (root) { /只获取有效字符节点/ if (root->type == NODE_TYPE_DATA) { nodelist[root->data] = root; } convertTreeToList(root->left, nodelist); convertTreeToList(root->right, nodelist); } }在代码中加一个冒泡排序
好的,下面是加入冒泡排序后的代码:
```
void convertTreeToList(pNode root, pNode nodelist[]) {
if (root) {
/*只获取有效字符节点*/
if (root->type == NODE_TYPE_DATA) {
nodelist[root->data] = root;
}
convertTreeToList(root->left, nodelist);
convertTreeToList(root->right, nodelist);
}
// 冒泡排序
for (int i = 0; i < 256 - 1; i++) {
for (int j = 0; j < 256 - i - 1; j++) {
if (nodelist[j] && nodelist[j+1] && nodelist[j]->count > nodelist[j+1]->count) {
pNode temp = nodelist[j];
nodelist[j] = nodelist[j + 1];
nodelist[j + 1] = temp;
}
}
}
}
```
这个代码将冒泡排序加入了原来的函数中,可以在遍历完 Huffman 树后对 Huffman 表进行排序。这里采用的是冒泡排序,将每个字符节点的指针按照 count(即出现次数)从小到大排序。这样,Huffman 表中出现次数少的字符节点就会排在前面,编码也就会比较短,提高了压缩效率。
阅读全文