树、森林与二叉树的转换

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

6.6 哈夫曼树

6.6.3哈夫曼树的应用

1.哈夫曼编码

通信中,可以采用0,1的不同排列来表示不同的字符,称为二进制编码。而哈夫曼树在数据编

码中的应用,是数据的最小冗余编码问题,它是数据压缩学的基础。若每个字符出现的频率相同,

则可以采用等长的二进制编码,若频率不同,则可以采用不等长的二进编码,频率较大的采用位

数较少的编码,频率较小的字符采用位数较多的编码,这样可以使字符的整体编码长度最小,这

就是最小冗余编码的问题。而哈夫曼编码就是一种不等长的二进制编码,且哈夫曼树是一种最

优二叉树,它的编码也是一种最优编码,在哈夫曼树中,规定往左编码为0,往右编码为1,则

得到叶子结点编码为从根结点到叶子结点中所有路径中0和1的顺序排列。

例如,给定权{1,5,7,3},得到的哈夫曼树及编码见图6-32 (假定权值就代表该字符名字)。

2.哈夫曼译码

在通信中,若将字符用哈夫曼编码形式发送出去,对方接收到编码后,将编码还原成字符的过

程,称为哈夫曼译码。

树- 树和森林- 树、森林和二叉树的转换

作者:自考频道来源:学赛网2008年1月5日发表评论进入社区

树或森林与二叉树之间有一个自然的一一对应关系。任何一个森林或一棵树可惟一地对应到一棵二叉树;反之,任何一棵二叉树

也能惟一地对应到一个森林或一棵树。

1.树、森林到二叉树的转换

(1)将树转换为二叉树

树中每个结点最多只有一个最左边的孩子(长子)和一个右邻的兄弟。按照这种关系很自然地就能将树转换成相应的二叉树:

①在所有兄弟结点之间加一连线;

②对每个结点,除了保留与其长子的连线外,去掉该结点与其它孩子的连线。

【例1】下面(a)图所示的树可转换为(c)图所示的二叉树。具体转换过程可

注意:

由于树根没有兄弟,故树转化为二叉树后,二叉树的根结点的右子树必为空。

(2)将一个森林转换为二叉树

具体方法是:

① 将森林中的每棵树变为二叉树

② 因为转换所得的二叉树的根结点的右子树均为空,故可将各二叉树的根结点视为兄弟从左至右连在一起,就形成了一棵二叉

树。

【例2】下图中,左边包含三棵树的森林可转换为右边的二叉树。

具体转换过程可

2.二叉树到树、森林的转换

把二叉树转换到树和森林自然的方式是:若结点x是双亲y的左孩子,则把x的右孩子,右孩子的右孩子,…,都与y用连线连起来

,最后去掉所有双亲到右孩子的连线。

【例3】下图的森林就是由例2中二叉树转换成的。

具体转换过程可

哈副慢算法

for I:=1 to n do

f[i].data:=w[i];

f[i].l;=0;

f[i].r:=0;

type tree=record

begin

data:integer

l,r;tree;

]

a[I].data 排序暂存空间data为各树根节点的值a【I】,add a[I]zai f 中地址

相关文档
最新文档