多叉树的设计、建立、层次优先遍历与深度优先遍历.pdfVIP

多叉树的设计、建立、层次优先遍历与深度优先遍历.pdf

  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文档。上传文档
查看更多
多叉树 的设计 、建立 、层次优先遍历和深度优先遍历 早起曾实现过一个简单的多叉树 《实现一个多叉树》。其实现原理是多叉树中的节点有两个域,分 别表示节点名以及一个数组,该数组存储其子节点的地址。实现了一个多叉树建立函数,用于输入格式为A B。A表示节点的名字,B表示节点的子节点个数。建立函数根据用户的输入,首先建立一个新的节点,然 后根据B的值进行深度递归调用。用户输入节点的顺序就是按照深度递归的顺序。另外,我们实现了一个层 次优先遍历函数。该函数用一个队列实现该多叉树的层次优先遍历。首先将根节点入队列,然后检测队列 是否为空,如果不为空,将队列出队列,访问出队列的节点,然后将该节点的子节点指针入队列,依次循 环下去,直至队列为空,终止循环,从而完成整个多叉树的层次优先遍历。 本文我们将还是介绍一个多叉树,其内容和之前的实现差不多。 首先,用户的多叉树数据存储在一个文件中,格式如下: 每行的第一个元素指定一个节点,其中第一行指定了该多叉树的根节点。第二个元素表示该节点有 几个子节点,紧接着后面跟了几个子节点。 根据以上数据文件,其对应的多叉树应该是如下: 我们想得到结果是将书中的节点按深度进行输出,比如先输出深度最深的节点:x e j ,然后输出深 度为2的节点:d f i,之后再输出深度为1的节点:g cC z bBbB,最后输出根节点:aA 。 按照深度将节点输出,很显然是用层次优先遍历的方法解决。层次优先遍历的实现原理就是从根节 点开始,利用队列实现。 另外,我们想得到从根节点开始到叶子节点直接所有节点名字加起来最长的一个路径,比如上面的 树中存在以下几条路径: aA g d x aA g d e aA g d j aA cC aA z f aA z i aA bBbB 显然,在这些路径中,aA bBbB是所有路径上节点名字加起来最长的一个路径。求解从根节点到叶子 节点上的所有路径,利用深度优先遍历更为合适。 下面我们讨论一下多叉树节点应该如何建立。首先多叉树的节点应该如何定义,节点除了有自身的 名字外,还要记录其子节点有多少个,每个子节点在哪里,所以我们需要增加一个记录子节点个数的域, 还要增加一个数组,用来记录子节点的指针。另外,还要记录多叉树中每个节点的深度值。 在读取数据文件的过程中,我们顺序扫描整个文件,根据第一个名字,建立新的节点,或者从多叉 树中找到已经有的节点地址,将后续的子节点生成,并归属于该父节点,直至扫描完整个数据文件。 读取完整个文件后,也就建立了多叉树,之后,我们利用队列对多叉树进行广度优先遍历,记录各 个节点的深度值。并将其按照深度进行输出。 获取从根节点到子节点路径上所有节点名字最长的路径,我们利用深度优先遍历,递归调用深度优 先遍历函数,找到最长的那个路径。 初次之外,还需定义队列结构体,这里使用的队列是循环队列,实现相关的队列操作函数。还有定 义栈的结构体,实现栈的相关操作函数。另外对几个内存分配函数、字符串拷贝函数、文件打开函数进行 了封装。需要注意的一点就是当操作完成后,需要对已经建

文档评论(0)

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

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

1亿VIP精品文档

相关文档