《数据结构-06树和二叉树(行业资料书)》课件.ppt

《数据结构-06树和二叉树(行业资料书)》课件.ppt

  1. 1、本文档共147页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.1 树的定义和基本术语 6. 2 二 叉 树 6.2.1 二叉树的定义 6.2.2 二叉树的性质 6.2.2 二叉树的性质 例 高度、叶子 例 高度、叶子 6.2.3 二叉树的存储 1 顺序存储 1 顺序存储 二叉链表 6.3 二叉树的遍历 一、 递归遍历 二叉树遍历举例 二叉树遍历举例 二叉树遍历举例 二、层次遍历 二叉树的生成 1 层次序列 2 先根、中根或后根 3 先序+中序,后序+中序决定一棵树 6.3.2 线索二叉树 线索二叉树 中序线索化 找中序前趋、后继 找中序前趋、后继 中序遍历线索二叉树 线索二叉树的生成 6.4 树和森林 6.4.1 树、林与二叉树转换 6.4.2 树的存储 1 双亲链表 2 孩子链表 2 孩子链表 3. 双亲孩子链表 4.孩子兄弟链表 6.4.3 树和森林的遍历 先根、后根遍历 层序遍历 6.6 哈夫曼树及其应用 6.6.2 哈夫曼编码 6.6.3 分类与判定树 6.7 递归消除 6.7.1 简单递归消除 6.7.2 基于栈的递归消除 1. 先根遍历 2. 中根遍历 3. 后根遍历 分类:将输入的数据按预定的标准划分成不同的种类。也称判定,其中每次检测也称一次判断。 每次判断产生两个结果:真或假,可用二叉树的两个分支来表示。判断后的子类若不是最终结果,则继续判断。整个过程可以用一棵二叉树来描述,称为分类问题的判定树。 所需的比较次数=N?(0.05?1+0.15?2+0.4?3+0.3?4+0.1?4)        =N ? pi ? ci a ? 80 a ? 90 不及格 良好 中等 及格 优秀 a ? 60 a ? 70 分数 0-59 60-69 70-79 80-89 90-100 比率 0.05 0.15 0.40 0.30 0.10 例 百分制转换为五分制,分数预期分布如下: 将比率pi看成是n个叶子的权,比较次数ci看成叶子的路径长度,则就是最优二叉树的构造问题。 分数 0-59 60-69 70-79 80-89 90-100 比率 0.05 0.15 0.40 0.30 0.10 找两个相邻的、权值的和较小的两个根。 不能简单地找两个权最小的根合并,还要求它们空间“相邻”,在分类上非此即彼。 char trans(float x) { if(x=80) if(x=90) return ’A’; else return ’B’; else if(x=70) return ’C’; else if(x=60) return ’D’; else return ’E’; } 平均比较次数=0.05×3+0.15×3+0.4×2+0.3×2+0.1×2=2.2 递归消除:将递归算法转换成等价的非递归算法 第一,有利于提高时空性能。反复递归,运行栈不断增长,只有当函数彻底执行完后,才释放它所占用的栈空间。 第二,有助于透彻理解递归机制。 第三,有些程序设计语言不允许递归,这时就不得不考虑非递归算法 。 将系统管理的递归工作过程(主要是工作栈)改为程序员模拟和管理,就可实现递归消除。 简单递归可不用栈。 返回后并不使用的信息不必保存,提高效率。 简单递归可不通过工作栈机制而直接转换成循环算法。这时计算依赖图的分析和化简是一种非常有用的辅助手段。 例 求阶乘n! 下箭头表示递归调用; 上箭头表示返回 所有递归调用直接或间接依赖于f(0) 整个计算可由后一阶段完成:依次计算f(0),f(1),f(2),…,f(n)。这是递推过程,可用循环完成。 long f(int n) { if(n==0) return 1; else return n*f(n?1); } long f1(int n) { long x; int i; x=1; for(i=1;i=n;i++) x=x*i; return x; } 例 计算菲波那契亚数列 int f(int n) { if(n==0) return 0; else if(n==1) return 1; else return f(n?1)+f(n?2); } 递归效率不高:有些值计算了多次。 化简:重复的点合并 全部计算只依赖于f(0)和f(1)。 通过自下而上的循环算法完成 A B C D E F G H J I K root A B C D E F G H J I K root A B C D E F G H J I K root A B C D E F G H J I K root 6.6.1 最优二叉树(哈夫曼树)

文档评论(0)

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

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

1亿VIP精品文档

相关文档