第327章 半

离语 semaphore 3164 字 7天前

根遍历序列是 b, a, d, f, e, c 则 T 的后根遍历序列是:

A、b, a, d, f, e, c B、b, d, f, e, c, a C、b, f, e, d, c, a D、f, e, d, c, b, a 考点 15:哈夫曼树(★★★)

1、最优二叉树(Huffman 树)

① 结点路径:从树中一个结点到另一个结点的之间的分支构成这两个结点之间的路径。

② 路径长度:结点路径上的分支数目称为路径长度。

③ 结点的带权路径长度:从该结点的到树的根结点之间的路径长度与结点的权(值)的乘积

④权(值):各种开销、代价、频度等的抽象称呼。

⑤树的路径长度:从树根到每一个结点的路径长度之和。

2、Huffman 树的构造

① 根据 n 个权值{w1, w2, �6�8 ,wn},构造成 n 棵二叉树的集合 F={T1, T2, �6�8 ,Tn},其中每棵二

叉树只有一个权值为 wi 的根结点,没有左、右子树;

② 在 F 中选取两棵根结点权值最小的树作为左、右子树构造一棵新的二叉树,且新的二

叉树根结点权值为其左、右子树根结点的权值之和;

③ 在 F 中删除这两棵树,同时将新得到的树加入 F 中;

④ 重复②、③,直到 F 只含一颗树为止。

构造 Huffman 树时,为了规范,规定 F={T1,T2, �6�8 ,Tn}中权值小的二叉树作为新构造的二叉树

的左子树,权值大的二叉树作为新构造的二叉树的右子树;在取值相等时,深度小的二叉树

作为新构造的二叉树的左子树,深度大的二叉树作为新构造的二叉树的右子树。

图是权值集合 W={8, 3, 4, 6, 5, 5}构造 Huffman 树的过程。所构造的 Huffman 树的 WPL

是: WPL=6×2+3×3+4×3+8×2+5×3+5×3 =79。

3、Huffman 编码方法

由于每个字符都是叶子结点,不可能出现在根结点到其它字符结点的路径上,所以一个

字符的 Huffman 编码不可能是另一个字符的 Huffman 编码的前缀。

若字符集 C={a, b, c, d, e, f}所对应的权值集合为 W={8, 3, 4, 6, 5, 5},如图所示,则字符

a,b, c,d, e,f 所对应的 Huffman 编码分别是:10,010,011,00 ,110,111。

以字符集 C 作为叶子结点,次数或频度集 W 作为结点的权值来构造 Huffman 树。规定

Huffman 树中左分支代表“0”,右分支代表“1” 。

从根结点到每个叶子结点所经历的路径分支上的“0”或“1”所组成的字符串,为该结

点所对应的编码,称之为 Huffman 编码。