基本概念
在一棵二叉树中,
由根节点到某个节点所经过的分支序列叫做由根节点到这个节点的路径。
由根节点到某个节点所经过的分支数称为由根节点到该节点的路径长度。
由根节点到所有叶子节点的路径长度之和称为该二叉树的路径长度。
如果二叉树中每一个叶节点都带有某一确定值,可以将二叉树的路径长度的概念推广。
设一棵具有n个带权值叶节点的二叉树,那么从根节点到各个叶节点的路径长度与对应叶节点权值的乘积之和叫做二叉树的带权路径长度。把其中具有最小带权路径长度的二叉树称为最优二叉树,也称为哈夫曼树。
根据定义,要使一棵二叉树的带权路径长度最小,必须使权值越大的叶子节点越靠近根节点,权值越小的节点越远离根节点。
哈夫曼树的构建步骤
- 由给定的n个权值{W1,W2,…,Wn}构造n棵只有一个根节点(亦为叶节点)的二叉树,从而得到一个森林F={T1,T2,…,Tn}。
- 从F中选取两棵根节点的权值最小的二叉树Ti,Tj,以Ti和Tj作为左,右子树构造一棵新的二叉树Tk(左子树的权值比右子树小)。置新的二叉树Tk的根节点的权值为其左右子树上根节点的权值之和。
- 在F中删去Ti,Tj,并把新的二叉树Tk加入F。
- 重复2和3的步骤,