数据结构(C/C++描述)阮宏一第6章树与二叉树课件教学.PPTVIP

数据结构(C/C++描述)阮宏一第6章树与二叉树课件教学.PPT

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构(C/C++描述)阮宏一第6章树与二叉树课件教学.PPT

讨论:不是完全二叉树怎么办? 对遍历的分析: 对遍历的分析: 2、建立二叉树的存储结构 不同的定义方法相应有不同的存储结构的建立算法 6.3.2 线索化二叉树 规 定: 有关线索二叉树的几个术语: 例2:画出以下二叉树对应的中序线索二叉树。 树转二叉树举例: 讨论2:二叉树怎样还原为树? 森林转二叉树举例:(法2) 讨论4:二叉树如何还原为森林? 6.5 哈夫曼树及应用 哈夫曼树 哈夫曼树的应用 哈夫曼算法的实现 a b e i d f h g c 要点:把所有右孩子变为兄弟!然后逆时针旋转45度。 a b e i d f h g c 法1: ① 各森林先各自转为二叉树; ② 依次连到前一个二叉树的右子树上。 讨论3:森林如何转为二叉树? 法2: 森林直接变兄弟,再转为二叉树 即F={T1, T2, …,Tm} B={root, LB, RB} A B C D E F G H J I A B C D E F G H J I A B C D E F G H J I 兄弟相连 长兄为父 孩子靠左 头根为根 A 要点:把最右边的子树变为森林,    其余右子树变为兄弟 A B C D E F G H J I A B C D E F G H J I E F A B C D G H J I 即B={root, LB, RB} F={T1, T2, …,Tm} 由此,树和森林的各种操作均可与二叉树的各种操作相对应。 应当注意的是,和树对应的二叉树,其左、右子树的概念已改变为: 左是孩子,右是兄弟 6.4.2 树和森林的遍历 一、树的遍历 二、森林的遍历 三、树的遍历的应用 树的遍历可有 3 条搜索路径: 按层次遍历: 先根(次序)遍历: 后根(次序)遍历: 若树不空,则先访问根结点,然后依次先根遍历各棵子树。 若树不空,则先依次后根遍历各棵子树,然后访问根结点。 若树不空,则自上而下自左至右访问树中每个结点。 层次遍历时顶点的访问次序: A B C D E F G H I J K 先根遍历时顶点的访问次序: A B E F C D G H I J K 后根遍历时顶点的访问次序: E F B C I J K H G D A A B C D E F G H I J K B C D E F G H I J K 1。森林中第一棵树的根结点; 2。森林中第一棵树的子树森林; 3。森林中其它树构成的森林。 可以分解成 3 部分: 森林 若森林不空,则访问森林中第一棵树的根结点; 先序遍历森林中第一棵树的子树森林; 先序遍历森林中(除第一棵树之外)其余树构成的森林。 先序遍历: 森林的遍历 即:依次从左至右对森林中的每一棵树进行先根遍历。 B C D E F G H I J K 森林 先序遍历序列: BEFCDGHIJK 后序遍历序列: EFBCIJKHGD 后序遍历: 1. 若森林不空,则后序遍历森林 中第一棵树的子树森林; 2. 访问森林中第一棵树的根结点; 3. 后序遍历森林中(除第一棵树之 外)其余树构成的森林。 即:依次从左至右对森林中的每一棵树 进行后根遍历。 1、统计二叉树中叶子结点的个数 算法基本思想: 先序(或中序或后序)遍历二叉树,在遍历过程中查找叶子结点,并计数。 由此,需在遍历算法中增添一个“计数”的参数,并将算法中“访问结点” 的操作改为:若是叶子,则计数器增1。 void CountLeaf (BiTree T, int count) { //先序遍历二叉树,计算叶子结点个数 if ( T ) { if ((!T-lchild) (!T-rchild)) count++; // 对叶子结点计数 CountLe

文档评论(0)

带头大哥 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档