- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一棵霍夫曼树,我已经有一个用 C 语言编写的频率排序数组。这是我的结构:
struct node
{
int value;
char letter; /* symbol */
struct node *left,*right; /* left and right subtrees */
};
typedef struct node Node;
在 main() 里面我有:
int main(){
Node *tree;
FILE *input, *output; //file input and output i am taking because i will take a input text file containing encoding of all 27 alphabets like a= 00001 b= 00010 etc.
buildHuffmanTree(&tree); // see it's function call there i already have done sorting of frequencies using qsort() BUT I DON'T KNOW WHAT TO DO AFTER.
return 0;
}
看这里:
void buildHuffmanTree(Node **tree){
Node *temp;
Node *array[27];
int i, subTrees = 27;
int smallOne;
for (i=0;i<27;i++)
{
array[i] = malloc(sizeof(Node));
array[i]->value = englishLetterFrequencies[i]; //this englishLetterFrequencies[27] contains the the frequencies of all 27 alphabtets like ={81,27,1,12.....up to 27 index of this array}
array[i]->letter = i;
array[i]->left = NULL;
array[i]->right = NULL;
}
//here is the sorting part:
int i = 0; int d,p;
printf("the array frequency is \n");
for(d=0;d < 27;d++)
printf("%d ",array[d]->value);
// sorting of arrays
qsort(array,27,sizeof(*array),cmpfunc);
//////////////////////////
printf("\n the sorted array frequency is \n");
for(p=0;p < 27;p++)
printf("%d ",array[p]->value); //So now this array[p]->value contains all the sorted frequency.
//I DON'T KNOW WHAT TO DO NOW
return;
}
现在对于排序数组,我想到的是..首先我将获取前两个节点(位于我的递增顺序排序数组[]的第一个和第二个索引中),然后添加它们并再次排序并形成使用它的树。但我不知道要这样做。我是初学者。任何人都可以解释如何实现它?
最佳答案
分配一个新节点。取频率最低的两个节点,将它们分配到新节点的左侧和右侧,并将它们的频率之和放入新节点的值中。通过向下移动其他元素来从数组中删除两个节点。现在,通过将较大的元素向上移动一位,将新节点插入到数组中小于 value 的元素之后和大于 value 的元素之前。数组现在少了一个元素。
重复此操作,直到数组中存在一个元素。那是树的根。
关于c - 如何在c中创建霍夫曼树(已经有一个排序数组),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20962734/
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我这样定义了一个二叉树: struct btree { int x; btree* left_child = nullptr; btree* right_child = nul
我有这个霍夫曼代码,旨在返回数组中每个字母的霍夫曼代码并按字母顺序打印它们。问题是它不生成任何输出,而是继续处理,直到我手动退出它。谁能帮我找出错误吗?我认为我的代码是正确的,但我不知道无限循环从何而
动机 想象一下一个哈夫曼压缩文件被部分下载,就像在p2p软件中一样,所以我们首先为整个文件分配磁盘空间,然后开始随机下载文件块。其中一个哈夫曼密码(但我们不知道是哪一个)是一个结束密码,所以如果这个密
以下 block 由霍夫曼 block 标记嵌套 -HUFF---------------------------------------------------------------------0
我是一名优秀的程序员,十分优秀!