第6章树二叉树研究.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(3)孩子兄弟表示法 每个节点中存储自己的第一个孩子和兄弟的地址(连接所有的兄弟),属于链式存储,存储结构如下: typedef struct tnode { DataType data; struct tnode *firstson,*nextbrother; }Tnode; 3.树、森林和二叉树的转换 树和森林的存储表示复杂,实施具体的算法很困难,而二叉树的算法的比较丰富,牵涉到树和森林的问题,一般转换成对应的二叉树,通过二叉树来解决 树转换成二叉树 森林转换成二叉树 二叉树转换成树 二叉树转换成森林 树转换成二叉树 将一棵树转换为二叉树的方法是: 树中所有相邻兄弟之间加一条连线。 对树中的每个结点,只保留它与第一个孩子结点之间的连线,删去它与其它孩子结点之间的连线。 以树的根结点为轴心,将整棵树顺时针转动一定的角度,使之结构层次分明 转换过程示意图: 4.树和森林的遍历 树的遍历:有先根遍历和后根遍历两种 思考:树的遍历有没有中根遍历? 先根遍历: 访问根结点 按照从左到右的顺序先根遍历根结点的每一棵子树 后根遍历: 按照从左到右的顺序后根遍历根结点的每一棵子树 访问根结点 遍历的结果 ? 先根遍历结果: A B E F I G 先根遍历:先访问树的根结点,然后依次先根遍历根 的每棵子树 D A B D E F G I 后根遍历:先依次后根遍历每棵子树,然后访问根结点 A B D E F G I 后根遍历: E I F G B D A A B C D E F G H I J K L M N O 先根遍历: 后根遍历: A B E F I G C D H J K L N O M E I F G B C J K N O L M H D A A B C D E F G H I J K L M N O [例] 树: 对应二叉树: 先序遍历: A B E F I G C D H J K L N O M 中序遍历: E I F G B C J K N O L M H D A 树的先根遍历与对应二叉树的先序遍历结果相同! 树的后根遍历与对应二叉树的中序遍历结果相同! 6.6 哈夫曼树 1.问题的提出:在通信系统中,要发送由A,B,C,D四个字符组成的信息,A出现的概率为0.5,B出现的概率为0.25,C出现的概率为0.1,D出现的概率为0.15。如何对A、B、C、D 四个字符进行编码,能使总的编码长度最短? 思路 另一种编码方案 类似3-8译码器 第二种编码方案优于第一种编码方案 是否有规律可循? 2.与哈夫曼树相关的一些概念 1) 路径 从树中一个结点到另一个结点之间的分支构成两个结点之间的路径。 2) 路径长度 路径上的分支数目。 3) 树的路径长度 根结点到每个叶子结点的路径长度之和。 4) 树的带权路径长度 树中所有叶子结点的带权路径长度之和。记作: 其中,wi是第i个叶子结点的权值,li为从根到第i个叶子结点的路径长度,m为树的叶子结点的个数 3.哈夫曼树的定义 最优二叉树 设有m个权值{w1,w2,…,wm},构造一棵有m个叶子结点的二叉树,第i个叶子结点的权值为wi,则带权路径长度WPL最小的二叉树被称作最优二叉树,这种最优二叉树也称之为哈夫曼树 哈夫曼树举例 权值的计算: b是哈夫曼树 4.建立哈夫曼树的算法 (1) 根据给定的m个权值{w1,w2,…,wm},构成m棵二叉树的集合T={T1,T2,…,Tm},其中每个Ti只有一个带权为wi的根结点,其左右子树均空。 (2) 从T中选两棵根结点的权值最小的二叉树,不妨设为Ti′、Tj′并作为左右子树构成一棵新的二叉树Tk’,并且置新二叉树的根值为其左右子树的根结点的权值之和。 (3) 将新二叉树Tk’并入到T中,同时从T中删除Ti′、Tj′。 (4) 重复(2)、(3),直到T中只有一棵树为止。这棵树便是哈夫曼树。 构造过程: 假设有一组权值{5,29,7,8,14,23,3,11},下面我们将利用这组权值演示构造哈夫曼树的过程。 第一步:以这8个权值作为根结点的权值构造具有8棵树的森林 5 29 7 8 14 23 3 11 第二步:从中选择两个根的权值最小的树3,5作为左右子树构造一棵新树,并将这两棵树从森林中删除,并将新树添加进去 3 5 29 7 8 14 23 11 8 第三步:重复第二步过程,直到森林中只有一棵树为止 选择7,8 29

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档