练习做一下构造最优二叉树的算法,不过如何计算WPL呢?
本次未能实现,希望懂的人可以帮我解决一下这个问题,不胜感激!
//
// 头文件:HuffmanTree.h
//
// 叶子结点的最大数量
#define LEAVES_COUNT 4
//
// 二叉树的最大结点总数
#define NODES_COUNT (2 * LEAVES_COUNT - 1)
//
// 哈夫曼树的结点结构体
typedef struct tagHuffmanTreeNode
{
float weight; // 权值,假设权值都是大于零的值
int parent; // 指示双亲
int lchild; // 指示左孩子
int rchild; // 指示右孩子
}HuffmanNode;
//
// 哈夫曼树定义为二维数组
typedef HuffmanNode HuffmanTree[NODES_COUNT];
//
// 构造一棵哈夫曼树
void CreateHuffmanTree(HuffmanTree tree);
//
// 初始化
void InitHuffmanTree(HuffmanTree tree);
//
// 输入叶子的权值
void InputWeightsOfLeaves(HuffmanTree tree);
//
// 选择两个权最小的结点生成新的结点
void SelectMin(HuffmanTree tree, int maxValue, int *left, int *right);
//
// 计算哈夫曼树的最小带权路径长度之和
int ComputeWPL(HuffmanTree tree);
//
// 测试哈夫曼树的构造,译码
// HuffmanTree.c
#include <stdio.h>
#include <stdlib.h&