最优二叉树算法

博主正在探索如何构造最优二叉树,并寻求计算WPL(Weighted Path Length)的方法。目前遇到困难,期待同行帮助解答。
摘要由CSDN通过智能技术生成

练习做一下构造最优二叉树的算法,不过如何计算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&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值