- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- 石墨矿可行性研究报告.doc
- 石阡县均田小学安全防范应急预案.doc
- 石泉小学小学文明班级评比方案.doc
- 石油的储集层.doc
- 石油计量员培训考核计算试题及答案.doc
- 石油计量员培训考核理论试题及答案.doc
- 石油焦用途及延迟焦化装置工艺路线的选择.docx
- 石油天然气长输管道建设施工管理方案.doc
- 石柱县年春小学六年级期末学业质量检测预览版.doc
- 时、分、秒千米和吨练习.doc
- 2025年浙江台州三门县事业单位招聘43人笔试备考题库及答案详解1套.docx
- 2025年河南省疾病预防控制中心招聘方案笔试备考题库含答案详解.docx
- 2025年海口市社会保险服务中心下属事业单位招聘(第一号)笔试备考题库含答案详解.docx
- 人教版三年级语文下册《童年的水墨画》公开课教学课件.pptx
- 人教版三年级语文下册《童年的水墨画》示范教学课件.pptx
- 2025年河南南阳市第五中学校校园招聘教育紧缺人才10人笔试高频难、易错点备考题库附答案详解.docx
- 2025年海南海口市龙华区面向本科及以上学历应届生招聘教师120人笔试备考题库及参考答案详解一套.docx
- 2025年浙江温州市瓯海区事业单位招聘(选调)52人笔试备考题库参考答案详解.docx
- 2025年浙江衢州常山县公安局招聘编外人员8人(一)笔试高频难、易错点备考题库及参考答案详解.docx
- 2025年浙江温州永嘉县事业单位引进博士研究生笔试高频难、易错点备考题库带答案详解.docx
文档评论(0)