第6章 树和二叉树C.pptVIP

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

第6章 树和二叉树 (Tree Binary Tree) 6.3 遍历二叉树和线索二叉树 例:【 2000年计算机系考研题】给定如图所示二叉树T,请画出与其对应的中序线索二叉树。 线索二叉树的生成(递归算法见教材P134-135) 6.4 树和森林 6.4.1 树和森林与二叉树的转换 树转二叉树举例: 讨论2:二叉树怎样还原为树? 森林转二叉树举例: (用法二,森林直接变兄弟,再转为二叉树) 讨论4:二叉树如何还原为森林? 6.4.2 树和森林的存储方式 例如: 6.4.3 树和森林的遍历 森林的遍历 附:二叉树若干典型算法(习题课) 附2:层次遍历算法(需要利用队列) 严题集6.47 ④ 附3:判别给定二叉树是否为完全二叉树 严题集6.49 ④ 附4:中序遍历的非递归算法(或称迭代算法)见教材P131 * * 方案一:二叉树的建立和遍历 具体内容:先生成一棵二叉树,再用中序遍历方式打印每个结点值,并统计其叶子结点的个数。 方案二:哈夫曼树的建立和编码器的实现 具体内容:先生成一棵哈夫曼树,再打印各字符对应的哈夫曼编码。 方案三:哈夫曼编/译码器的设计与实现 具体内容:参见严题集P149 实习5.2要求,或参见自测卷 第二次上机内容预告: (三个方案由易到难,可自选,参见自测题集实验二资料) 第6章?? 树和二叉树 作业(共11题) 6.5 6.8 6.17 6.25 6.26 6.29 6.42 6.43 6.47 6.49 6.65 喻信课堂网址:8:8000/ 海豚之家网址: 6.1 树的基本概念 6.2 二叉树 6.3 遍历二叉树和线索二叉树 6.4 树和森林 6.5 赫夫曼树及其应用 二叉树的运算 6.3.1 遍历二叉树 遍历——指按某条搜索路线遍访每个结点且不重复。 常用的有先序、中序和后序遍历,还有层次遍历。 Traversing Binary Tree 6.3.2 线索二叉树 用二叉链表法存储包含n个结点的二叉树,结点的指针区域中会有n+1个空指针。 可以用它来存放当前结点的直接前驱和后继等线索,以加快查找速度。 Threaded Binary Tree 28 25 40 55 60 33 08 54 解:因为中序遍历序列是:55 40 25 60 28 08 33 54 对应线索树应当按此规律连线,即在原二叉树中添加虚线。 NIL NIL NIL和NULL的值都是0,区别何在? 在Delphi中NIL用来标记空指针,Null用来表示空的Variant型变量或是ASCII码为0的字符,比如用于标记字符串结束。 在C/C++中定义的宏NULL不加区别的包括了以上两种含义。 可见Object Pascal的语法要比C/C++严谨得多 设计技巧:依某种顺序遍历二叉树,对每个结点p,判断其左指针是否为空,以及其前驱结点的右指针是否为空。 每次只修改前驱结点的右指针(后继)和本结点的左指针(前驱),参见算法6.6。 线索二叉树的遍历(无需堆栈) 难点:在线索化二叉树中,并不是每个结点都能直接找到其后继的,当标志为0时,则需要通过一定运算才能找到它的后继。 6.4.1 树和森林与二叉树的转换 6.4.2 树和森林的存储方式 6.4.3 树和森林的遍历 转换步骤: step1: 将树中同一结点的兄弟相连; 加线 抹线 旋转 讨论1:树如何转为二叉树? 孩子—兄弟表示法 step2: 保留结点的最左孩子连线,删除其它孩子连线; step3: 将同一孩子的连线绕左孩子旋转45度角。 方法:加线—抹线—旋转 a b e i d f h g c a b e i d f h g c 兄弟相连 长兄为父 孩子靠左 特点是? 根结点没有右孩子! a b e i d f h g c 要点:逆操作,把所有右孩子变为兄弟! a b d e f h g i c 法一: ① 各森林先各自转为二叉树; ② 依次连到前一个二叉树的右子树上。 讨论3:森林如何转为二叉树? 即F={T1, T2, …,Tm} B={root, LB, RB} 法二:森林直接变兄弟,再转为二叉树 (参见教材P138图6.17,两种方法都有转换示意图) 法一和法二得到的二叉树是完全相同的、惟一的。 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 要点:把最右边的子树变为森林,其余右子树变为兄弟 即B={root, LB, RB} F={T1, T2, …,Tm} A B C D E F G H J

文档评论(0)

wyjy + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档