2.一个单位有5个部门,每个部门都有一部电话,但是整个单位只有一根外线,当有电话打过来的时候,由转接员转到内线电话,已知各部门使用外线电话的频率为(次/天):5 16 9 12 19。利用哈夫曼树算法思想设计内线电话号码,使得接线员拨号次数尽可能少。要求:
(1)依据使用外线电话的频率构造二叉树;
(2)输出设计出的各部门内线电话号码。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define OVERFLOW -1
typedef struct {
unsigned int weight;//权重
unsigned int partent, lchild, rchild;//节点的双亲,左孩子,右孩子的下标
}HTNode,* HuffmanTree;
typedef int Status;
typedef char** HuffmanCode;
//选择出最小的两个结点
void Select(HuffmanTree* HT, int n, int* s1, int* s2) {
int i;
unsigned int min = 9999;
int temp1 = 0, temp2 = 0;
//对比找到的两个双亲节点为0的节点;
for (i = 1;i <= n;i++) {
if ((*HT)[i].partent == 0 && (*HT)[i].weight < min) {
min = (*HT)[i].weight;
temp1 = i;
}
}
*s1 = temp1;
min = 9999;
//
for (i = 1;i <= n;i++) {
if ((*HT)[i