树、森林与二叉树的转换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 中地址