用两种方式实现表达式自动计算
一、 设计思想
哈夫曼树又称最优树,是一种带权路径最短的树。树中任何一个结点到其子节
点的指尖的分支构成两点之间的路径,分支的个数称为路径长度。树的路径长度是
指从跟到每一个结点的路径长度与结点权值的乘积。树的带权路径长度是指所有叶
子结点带权路径长度之和。
1.假设有 N 个权值{W1,W2,…,Wn},试构造以一棵有 N 个叶子结点的二叉树,
每个叶子结点带权为 Wi,则其中带权路径长度 WPL 最小的二叉树称做最优二叉
树或哈夫曼树。
2. 在 统 计 完 各 个字 符 出 现 的 次 数 之 后 , 以 其 出 现 的 次 数 作 为 权 值 建 立 起
HumanTree.并且约定左分支表示字符‘0’,右分支表示‘1’,则可以从根结点的
路径上分支字符组成字符串作为该叶子结点字符的编码。然后根据建立起的树实
现各个字符的编码,生成编码表文件 humanlink.txt。
3.哈夫曼树建立之后,求每一个字符的编码需要走一条从叶子结点出发,走一条从
叶子结点到根结点的路径。实现各个字符的编码之后,在将原英文文章编码,将
所得的文章编码的结果保存在一个文件 human.txt 当中。
4.读文件 human.txt,需要从根结点到叶子结点的路径,因而对于每一个结点既
需要知道其双亲结点的信息,又要知道其孩子结点的信息读编码生成原文件,并
将所得结果保存在文件 yuan.txt 当中。
5.HumanTree 的建法为:
( 1 ) . 根 据 给 定 的 n 个 权 值 {W1 , W2 , … ,Wn} 构 成 n 棵 二 叉 树 的 集 合
F={T1,T2,…,Tn}其中每棵二叉树 Ti 中只有一个带权为 Wi 的根结点,其左
右子树均为空。
(2).在 F 中选两棵根结点的权值最小的树作为左右子树构造一个新的二叉树,并
置新二叉树的根结点的权值为其左右子树上根结点的权值之和。
(3).在 F 中删除这两棵树,同时将新得到的二叉树加入到 F 中。
(4).重复(2)( 3),直到含有一棵树为止。这棵树便是 HumanTree.
二、算法流程图
- 1 -