实验二二叉树.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  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文档。上传文档
查看更多
第 PAGE \* Arabic 6 页 实验二 二叉树 需求分析 输入形式与输入值的范围 形式:二叉树用先序遍历的方式输入。先输入根结点的值,然后是左孩子的值,如果该结点不存在,用#表示。因此一个高度为h的二叉树,它要输入的字符的个数为2h-1(包括#) 输入值的范围:为一个ASCII码的范围 输出形式 程序输出刚刚所建的这棵树的先序遍历(递归与非递归),后序遍历(递归与非递归),中序遍历(递归与非递归),以及层次遍历(非递归)。然后提示用户输入两个字符,寻找这两个字符的公共祖先 程序功能 建立一棵二叉树,并且输出它的各种遍历形式。并且任意给两个节点的植,能够找出它们的最近的公共祖先。 测试数据 见下面的“六、测试结果”。 概要分析 用到的抽象数据类型: BinaryTree:表示一棵二叉树的类 TreeNode:表示一棵树的一个节点 LinkedQueue:一个用线性表实现的队列 LinkedStack:一个用线性表实现的堆栈 主程序的流程: 主程序在BinaryTreeMain.cpp中定义,首先是实例化一个BinaryTree类(即建立一棵空的树),然后提示用户按上面的输入形式输入一棵树(重载operator来实现)。程序会输出树的四种遍历(调用BinaryTree::inPrintTree, BinaryTree::prePrintTree, BinaryTree::postPrintTree, BinaryTree::levelPrintTree)。接着程序提示用户输入两个字符,来寻找这两个字符在这棵树中的公共祖先,调用BinaryTree::findAncester。 各文件的关系: BinaryTree.h定义一个BinaryTree类 BinaryTree.cpp对?BinaryTree类的实现文件 LinkedQueue.h用模板实现的LinkedQueue类 LinkedStack.h用模板实现的LinkedStack类 BinaryTreeMain.cpp该程序的主实现文件 详细设计 各函数之间的调用关系 BinaryTree::prePrintTree BinaryTree::prePrintTree BinaryTree::preorderTraverse BinaryTree::preorderTraverse2 BinaryTree::preorder BinaryTree::inPrintTreeBinaryTree::inorderTraverse BinaryTree::inPrintTree BinaryTree::inorderTraverse BinaryTree::inorderTraverse2 BinaryTree::inorder BinaryTree::postPrintTree BinaryTree::postorderTraverse BinaryTree::postorderTraverse2 BinaryTree::postorder BinaryTree::levelPrintTree BinaryTree::levelPrintTree BinaryTree::levelTraverse 调试分析 调试过程遇到的问题: 在求公共祖先的函数BinaryTree::findAncester中,应用了递归的方法,在对某个节点进行判断是否祖先时,先找左孩子,如果在其左孩子找到了一个用户输入的字符,则标记该节点为祖先,并且寻找其右子树(注意不是右孩子)有无另一个字符,如果有的话,寻找结束。否则的话,回朔到该节点的父节点,并标识该父节点为祖先,继续刚刚的操作。 该算法的问题:如果用户输入的两个字符,有一个字符是另一个字符的祖先时,该算法,则找不到祖先。所以,后来做了修改,处理了这种情况。 用户使用说明 程序共五个文件:BinaryTree.h; BinaryTree.cpp; BinaryTreeMain.cpp; LinkedQueue.h; LinkedStack.h; 用户拿到文件,要将它们添加到一个工程中,并且要对两个CPP文件都进行编译。即可运行。 测试结果 Now please input the tree: ABDH##I##E##CF#J##G## T.prePrintTree() Using recursion:ABDHIECFJG Not using recursion:ABDHIECFJG T.inPrintTree() Using recursion:HDIBEAFJCG Not using recursion:HDIBEAFJCG T.postPrintTree() Using recursion:HIDEBJFGCA Not using

您可能关注的文档

文档评论(0)

ccccccxx + 关注
官方认证
文档贡献者

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

认证主体临沂冉通信息技术有限公司
IP属地山东
统一社会信用代码/组织机构代码
91371300MA9576790T

1亿VIP精品文档

相关文档