- 题目地址
- 题目分析:
- 我们在分析哈夫曼树建立规则后可知,在所有(n个)数据作为子叶节点时,需且仅需(n-1个)连接点来构成完整的哈夫曼树。故,我们设置一个大小为2*n的结构体数组并使用其中1到2*n-1(共计n + n-1个位子)来建立哈夫曼树。
- 每次我们通过线性查找得到2个最小值,并做标记。这时,我们仅仅需要从n+1这个位置开始 记录 最小两值所处位置 直至2*n-1这个位置,而2*n-1这个位置既是我们的头结点。
- 每次我们检查学生数据仅仅需要比较min_length的长度段。
- 以上的处理针对型较强,仅仅适合这道数据量不多的题目。
- 我的代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> #define INF 0x3f3f3f3f typedef struct node { int val; int left, right; }node, *np; np nn; int n, m, huf = 0; bool mark[126]; void buildHuff(int id) { int min1 = INF, min2 = INF, m1=-1, m2=-1; for (int i = 1; i <= id - 1; i++) if (mark[i]) { if (nn[i].val < min1) { min2 = m