/通过递归遍历将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-03-20 15:39:39 浏览: 65
好的,下面是加入冒泡排序后的代码:
```
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 表中出现次数少的字符节点就会排在前面,编码也就会比较短,提高了压缩效率。
阅读全文