1.1最优二叉树
1.基本概念
1)路径长度:连接两结点的路径上的分支数。
2)树的路径长度:各结点到根结点的路径长度之和。
3)最优二叉树或哈夫曼树:带权路径长度最小的二叉树。
4)树的带权路径长度:树的所有叶子结点的带权路径长度之和,记为WPL。
2.哈夫曼树的构造
1)由给定的n个权值{w0,w1…wn},构造具有n棵二叉树的森林F,其中每一棵二叉树T只有一个带有权值w的根结点,其左右子树均为空。
2)在F中选取两个根结点权值最小和次小的二叉树,作为左右子树构造一棵新的二叉树,其根节点的权值为其左右子树根结点的权值之和。
3)在F中删去已作为新的二叉树的左右子树的两颗二叉树,把新的二叉树加入F中4)重复第二步和第三步,直到F中只剩下一棵树。
一个有n个叶子结点的初始集合,要生成哈夫曼树需要进行n-1次合并,产生n-1个新结点,最终构造的哈夫曼树有n+n-1个结点。哈夫曼树中没有度为1的分支结点,常将没有度为1的结点的二叉树称为严格二叉树。
#define n 16
#define m 2*n-1
typedef char datatype
typedef struct
{
float weight;
datatype data;
int lchild,rchild,parent;
}hufmtree;
hufmtree tree[m];