定义哈夫曼树之前先说明几个与哈夫曼树有关的概念:
路径:树中一个结点到另一个结点之间的分支构成这两个结点之间的路径
路径长度:路径上的分支数目
树的路径长度:从树根到每个结点的路径长度之和
结点的带权路径长度:在一棵树中,假设其结点上附带有一个权值,通常把该结点的路径长度与该结点上的权值之积称为该结点的带权路径长度。
一般来说,用n(n>0)个带权值的叶子来构造二叉树,限定二叉树中除了这n个叶子外仅能出现度为2的结点。那么符合这样条件的二叉树往往有很多颗,其中带权路径长度最小的二叉树就称为哈夫曼树或最优二叉树。
构建哈夫曼树
假设有n个结点,n个结点的权值分别为w1,w2,...,wn,构成的二叉树的集合为F={T1,T2,...,Tn},则可构造一棵含有n个叶子结点的哈夫曼树。步骤如下:
(1)从F中选取两棵根结点权值最小的树作为左右子树构造一棵新的二叉树,其新的二叉树的权值为其左右子树根结点权值之和;
(2)从F中删除上一步选取的两棵二叉树,将新构造的树放到F中;
(3)重复(1)(2),直到F只含一棵树为止。

网友评论