[2018年最新整理]ch06-树和二叉树(二).pptVIP

  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文档。上传文档
查看更多
[2018年最新整理]ch06-树和二叉树(二)

二叉树的部分操作 遍历二叉树 线索二叉树 遍历二叉树 遍历二叉树 按某种路径(或策略)访问二叉树中的每个结点,且对每个结点只访问一次。这样,二叉树中的结点按被访问顺序形成一个线性序列。 用于信息查询或逐一处理,是二叉树大部分其他操作的基础 遍历二叉树 二叉树的三个基本单元 根结点、左子树、右子树 符号约定 L:表示遍历左子树 D:表示访问根结点 R:表示遍历右子树 对二叉树的可能遍历顺序 DLR, LDR, LRD, DRL, RDL, RLD六种 若限定先左后右,则有DLR, LDR, LRD三种,分别称之为先序遍历,中序遍历和后序遍历,形成先序序列,中序序列和后序序列 遍历二叉树的操作 先序遍历二叉树(PreOrderTraverse) 访问根结点 先序遍历左子树 先序遍历右子树 中序遍历二叉树(InOrderTraverse) 中序遍历左子树 访问根结点 中序遍历右子树 后序遍历二叉树(PostOrderTraverse) 后序遍历左子树 后序遍历右子树 访问根结点 遍历二叉树的操作 遍历二叉树的操作 遍历二叉树的操作 遍历二叉树的操作 遍历二叉树的算法 算法实现 递归实现 非递归实现 二叉树的存储结构 采用二叉链表结构 遍历二叉树的递归算法 遍历二叉树的递归算法 遍历二叉树的递归算法 按先序序列建立二叉树的算法 按先序序列建立二叉树的算法 输入A B C _ _ D E _ G _ _ F _ _ _ 生成的二叉树及其存储结构为 按先序序列建立二叉树的算法 若希望建立如下二叉树对应的存储结构,应输入的字符序列是 几个问答 具有n个结点的不同形态的二叉树有多少棵? 有 棵,如n=3时,有5种不同形态 已知结点先序序列和中序序列,是否可以唯一地确定一棵二叉树? 能,如先序序列ABCDEFG,中序序列CBEDAFG,对应的二叉树为 几个问答 已知结点先序序列和后序序列,是否可以唯一地确定一棵二叉树? 不能, 如先序序列ABCK,后序序列BKCA 已知结点中序序列和后序序列,是否可以唯一地确定一棵二叉树? 能,如中序序列BKCA,后序序列BKCA 作业 分别按先序、中序和后序顺序列出下图二叉树的结点序列 用递归算法实现:交换二叉树中所有结点的左右子树。如: 线索二叉树 线索二叉树 将二叉树的每个结点按某种遍历序列进行线性化(也称穿线或线索化, Threading) 在线索树上进行遍历,只需先找到序列中的第一个结点,然后依次找结点后继直至后继为空而止。因此遍历速度将会提高 二叉树中结点的前驱与后继 按某种遍历序而言,如: 结点B在先序下的前驱为A,后继为C 结点B在中序下的前驱为C,后继为E 结点B在后序下的前驱为D,后继为A 线索二叉树 线索二叉树与普通二叉树的区别 利用普通二叉树的空链域(n个结点的二叉树有n+1个空链域)来存放指向结点前驱或后继的指针,形成线索 依照某种遍历顺序对二叉树进行线索化后,形成了所谓的“某序线索二叉树” 线索二叉树 线索二叉树 线索二叉树 线索二叉树中结点的存储结构 ltag=0表示结点有左孩子,并由lchild指向 ltag=1表示结点没有左孩子, lchild指向该结点的前驱(线索) rtag=0表示结点有右孩子,并由rchild指向 rtag=1表示结点没有右孩子, rchild指向该结点的后继(线索) 用这种结点结构构成的二叉链表的变形称为线索链表 线索二叉树 线索二叉树 通常,若在程序中所用二叉树需经常遍历或查找结点在遍历所得线性序列中的前驱和后继,则应采用线索链表作存储结构 在线索树上进行遍历,只需先找到序列中的第一个结点,然后依次找结点后继直至后继为空而止 如何寻找指定结点的前驱继或后继呢? 线索二叉树 以中序线索二叉树为例,寻找结点p的后继 即:寻找指定结点p在中序下的后继 线索二叉树 在中序线索二叉树中找结点p在中序下的前驱 即:寻找指定结点p在中序下的前驱 线索二叉树 遍历中序线索二叉树的算法 线索二叉树 线索化二叉树(或建立线索二叉树)的算法 实际上就是在遍历过程中修改空指针域的过程 算法思路: 假设原有二叉树T已经按照线索链表结构建立起来,但尚未通过空指针域进行穿线 建立并初始化穿线二叉树的头结点,并用Thrt指向 之后,在中序遍历二叉树T的基础上对空指针域进行修改,使得左空指针域指向其前驱,右空指针域指向其后继。为了记录遍历过程中访问结点的先后关系,附设了指针pre始终指向刚刚访问过的结点,而当前结点用指针p来指向 线索二叉树 如:以中序遍历建立中序线索链表的算法 线索二叉树 建立中序线索二叉树 建立中序线索二叉树 建立中序线索二叉树 * D L R A B C 先序序列:ABC 中序序列:BAC

文档评论(0)

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

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

1亿VIP精品文档

相关文档