中根与后根构造二叉树与二叉树的匹配替换-数据结构课程设计.doc
《中根与后根构造二叉树与二叉树的匹配替换-数据结构课程设计.doc》由会员分享,可在线阅读,更多相关《中根与后根构造二叉树与二叉树的匹配替换-数据结构课程设计.doc(9页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流中根与后根构造二叉树与二叉树的匹配替换-数据结构课程设计南京工程学院课程设计说明书(论文)题 目中根与后根构造二叉树与二叉树的匹配替换课 程 名 称 数据结构 院(系、部、中心) 计算机工程学院 专 业 计算机科学与技术 班 级 计算机卓越131 学 生 姓 名 羌秀君 学 号 202130404 设 计 地 点 信息楼 指 导 教 师 叶核亚 设计起止时间:2016年5月10日至2016年5月20日一、课程设计目的和要求目的:深入理解数据结构的基本理论,掌握数据存储结构的设计方法,掌握基于数据结构的各种操作的实现方法,训练对基础知识和基本方
2、法的综合运用能力,增强对算法的理解能力,提高软件设计能力。在实践中培养独立分析问题和解决问题的作风和能力。要求:熟练运用C+语言、基本数据结构和算法的基础知识,独立编制一个具有中等难度的、解决实际应用问题的应用程序。通过题意分析、选择数据结构、算法设计、编制程序、调试程序、软件测试、结果分析、撰写课程设计报告等环节完成软件设计的全过程,不断地完善程序以提高程序的性能。二、题意说明及分析题目要求采用中根和后根序列构造一颗二叉树,并匹配替换二叉树的子树。中根和后根构造:由于后根可以确定一颗树的根,而中根在知道根的情况下可以确定左右子树的序列,因此这样递归,中根和后根可以确定一颗唯一的二叉树。匹配替
3、换二叉树:1. 通过遍历二叉树找到关键树根值在待匹配树中首次出现的位置,返回节点地址。2. 判断以找到的节点为根的子树和带匹配的树是否相同,采用递归算法。3. 确定以找到根节点的子树与带匹配的树相同,然后删除以此为根节点的子树,然后再将带替换的树复制到删除的节点。三、算法设计与分析算法设计思路、数据结构描述、流程图等中根和后根构造算法:设数组inlist和lalist分别表示一颗二叉树的中根和后根序列,两序列长度均为n。1.由后根遍历的次序可知,该二叉树的根是lalistn-1;改节点必定在中根次序中,设根节点在中根次序的第i个位置即inlisti=lalistn-1。2.由中根遍历次序知,i
4、nlisti节点前的节点在根的左子树上,inlisti后的所有节点在根节点的右子树上。因此,根的左子树由i个节点组成,子序列为:左子树的后根次序 lalist0.lalisti-1左子树的中根次序inlist0.inlisti-1根的右子树由n-j-1个节点,子序列为:右子树的后根次序 lalisti.lalistn-2右子树的中根次序 inlisti+1.inlistn-13. 以此递归,可唯一确定一颗二叉树。算法实现:templateBinaryTree:BinaryTree(T lalist,T inlist,int n)this-root=create(lalist,inlist,n-
5、1,n-1,n,root);templateBinaryNode* BinaryTree:create(T lalist,T inlist,int end,int inend,int n,BinaryNode*parent)BinaryNode*p=NULL;if (n0)p=new BinaryNode(lalistend);int i=0;while(iparent=parent;p-right=create(lalist,inlist,end-1,inend,i,p);p-left=create(lalist,inlist,end-i-1,inend-i-1,n-i-1,p);retur
6、n p;匹配替换二叉树算法:通过遍历二叉树找到关键树根值在待匹配树中首次出现的位置,返回节点地址。判断以找到的节点为根的子树和带匹配的树是否相同,采用递归算法。确定以找到根节点的子树与带匹配的树相同,然后删除以此为根节点的子树,然后再将带替换的树复制到删除的节点。算法实现:/查找根节点templateBinaryNode* BinaryTree:searchhead(BinaryNode*q,BinaryNode*p)BinaryNode*m=NULL;if(q!=NULL&p!=NULL)if(q-data=p-data)return p;if(m=searchhead(q-left,p)=
7、NULL)m=searchhead(q-right,p);returnm;/查找子树templateBinaryNode* BinaryTree:searchone(BinaryTree&bintree)BinaryNode*p=searchhead(root,bintree.root);if(p!=NULL)if (matchtree(p,bintree.root)return p;elsereturn NULL;elsereturn p;/匹配子树templatebool BinaryTree:matchtree(BinaryNode*p,BinaryNode*q)return (p =
8、NULL & q = NULL)|(q != NULL & p != NULL)&(p-data = q-data)&(matchtree(p-left,q-left)&matchtree(p-right,q-right);四、源程序1.二叉树节点类templateclass BinaryNodepublic:T data;/数据域BinaryNode*left,*right,*parent;/指针域,分别指向左右孩子节点/构造函数BinaryNode(T data,BinaryNode*left=NULL,BinaryNode*right=NULL,BinaryNode*parent=NUL
9、L)this-data=data;this-left=left;this-right=right;this-parent =parent;二叉树类#include using namespace std;#include BinaryTreeNode.htemplateclass BinaryTreepublic:BinaryNode* root;BinaryTree();/构造空二叉树BinaryTree(T lalist, T inlist, int n);/以中根和后根序列构造二叉树BinaryTree();/析构bool empty();/判断是否为空二叉树friend ostream
10、 & operator(ostream& out, BinaryTree&);/输出void preOrder();/输出先根次序遍历序列string getinOrder(BinaryNode*);/获得中根次序遍历的字符串string getpostOrder(BinaryNode*);/获得后根次序遍历的字符串void remove(BinaryNode*parent, bool leftchild);/删除parent节点的左或右子树BinaryNode* searchone(BinaryTree&);/查找子树BinaryNode* searchhead(BinaryNode*q,T
11、 key);/查找头结点bool matchtree(BinaryNode*p, BinaryNode*q);void destroy(BinaryNode*p);bool replace(BinaryTree&key, BinaryTree&re);private:void preOrder(BinaryNode*p);/先根次序遍历以p节点为根的子树void postOrder(BinaryNode*p, string &str);/后根void inOrder(BinaryNode*p, string &str);/中根次序遍历以p节点为根的子树BinaryNode* create(T
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 构造 二叉 匹配 替换 数据结构 课程设计
限制150内