哈夫曼树
构造
给定n个权值
1)将这n个权值分别看作只有根结点的n棵二叉树,这些二叉树构成的集合记为F。
2)从F中选出两棵根结点的权值最小的树(假设为a、b)作为左、右子树,构造一棵新的二叉树(假设为c),新的二叉树的根结点的权值为左、右子树根结点权值之和。
3)从F中删除刚才选出的两棵树a、b,同时将新得到的树c加入F中。
4)重复进行2)、3)两步,直到F中只剩下一棵树为止,这棵树就是哈夫曼树。
哈夫曼树构造结果
都是左子树根权值小于右子树根权值,两子树根权值相同则较矮的子树在左边。
特点【判断构造是否正确】
1)每个初始结点最终都成为叶结点,且权值越小的结点到根结点的路径长度越大。
2)构造过程中共新建了n-1个结点(双分支结点),因此哈夫曼树的结点总数为2n- 1。
3)每次构造都选择2棵树作为新结点的孩子,因此哈夫曼树中不存在度为1的结点。
度:树中一个结点的子结点个数称为该结点的度
哈夫曼编码
如何编码?
对赫夫曼树每个结点的左右分支进行编号,左0右1,
则从根到每个结点的路径上的数字序列即为每个字符的编码。