1.问题
构造最优前缀编码
2.解析
首先对一组数据进行排序,找出最小的两个数,然后构造出一棵二叉树,新的二叉树的值为两个子树的值的和,在原数据中去掉两个子树的数据并加入新树的数据。
重复上诉步骤即可构造出最优前缀编码
3.设计
#include<iostream>
using namespace std;
#define N 3
typedef struct Tree* TreeN;
struct Tree{
double num = NULL;
char letter = NULL;
TreeN lc = NULL, rc = NULL;
};
int main() {
cout << "输入" << N << "组字符与频率:\n";
char x[N];//代表字符
double y[N];//代表频率
double a, b;
for (int j = 0; j < N; j++) {
cin >> x[j] >> y[j];//输入字符和频率
}
TreeN t[N];
for (int i = 0; i < N; i++) {
t[i] = new Tree;
t[i]->letter = x[i];
t[i]->num = y[i];
}
TreeN p = new Tree;
p->lc = t[0];
p->rc = t[1];
TreeN q = new Tree;
q->lc = p;
q->rc = t[1];
return 0;
}
//a 20 b 30 c 50
//由于基础有些不扎实,无法构造出该二叉树,只能以3个数据为例来做实验,实验中是顺序执行,构造出了该二叉树