树与二叉树转换实现10.docx
《树与二叉树转换实现10.docx》由会员分享,可在线阅读,更多相关《树与二叉树转换实现10.docx(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、河南工程学院数据结构与算法课程设计成果报告树与二叉树转换实现2. 4程序流程流程图可以给我们清楚的展示一些复杂的程序流程,帮助我们分析更加清楚 明了。掌握流程图的画法和能够清晰地用流程图表示我们编程思路尤为重要。树 与二叉树流程图2-5如下图:图2-5流程图72. 5测试程序此次程序是树与二叉树转换的相关函数库,及在程序设计中调用,最主要的 是实现树与二叉树的转换。编译运行程序,根据提示输入结点个数、根结点的数据,以根结点的数据为 依据依次输入第二个结点树和其根节点数据、第三个结点树和其根节点数据、第 四个、第五个、第六个直到与初始节点个数相同为止。给出假设干实例演示, 通过调用自己所写的数据
2、使程序来实现相关问题的求解。将程序运行结果和预想的结果相比拟,分析程序中缺乏之处,查找问题所在, 致力改良程序,使程序更加合理。3程序清单树与二叉树的转换的主要程序如下所示:/*树和二叉树的结构体*/typedef struct stl树节点的类型char data;数据域,采用char型struct stl *childrenDEGREE;指向孩子节点的指针域 CTreeNode;typedef struct st2char data;数据域struct st2 *lchild,*rchild;左右孩子节点的指针 BTreeNode;/*入队列*/树队列元素入队int addQ.ueueCT
3、ree(QueueCTree *&q,CTreeNode *ctroot)/(if(q-CTreeRear+l)%MAX_NODE_NUM=q-CTreeFront)/|3Aw return 0;q-CTreeRear=(q-CTreeRear+l)%MAX_NODE_NUM;q-CTreeArrayq-CTreeRear=ctroot;return 1;入队列)二叉树队列元素入队int addQueueBTree(QueueBTree *&q,BTreeNode *btroot)if(q-BTreeRear+l)%MAX_NODE_NUM= q-BTreeFront) 队满 return 0
4、;q-BTreeRear=(q-BTreeRear+l)%MAX_NODE_NUM;q-BTreeArrayq-BTreeRear=btroot;return 1;入队列)/*出队列*/树队列元素出队CTreeNode *delQueueCTree(QueueCTree *&q)CTreeNode *ctroot;if(q-CTreeFront =q-CTreeRear) 队空return NULL;返回空指针q-CTreeFront=(q-CTreeFront+l)%MAX_NODE_NUM;ctroot=q-CT reeArrayq-CT reeFront;return ctroot;返回
5、节点 二叉树队列元素出队BTreeNode *delQueueBTree(Q.ueueBTree *&q)BTreeNode *btroot;if(q-BTreeFront =二q-BTreeRear) 队空return NULL;返回空指针9q-BTreeFront=(q-BTreeFront+l)%MAX_NODE_NUM;btroot=q-BTreeArrayq-BTreeFront;return btroot;返回节点)/*树转化为二叉树*/void TreeToBTree(CTreeNode *ctroot,BTreeNode *&btroot)树转化为二叉树 ctroot指向树的根
6、节点,btroot,指向二叉树的跟QueueCTree *VisitedCTreeNodes;QueueBTree * Visited BTreeNodes; 辅助队歹 UinitQueueCTree(VisitedCTreeNodes);initQueueBTree(VisitedBTreeNodes);/初始化队歹UCTreeNode *ctnode;BTreeNode *btnode/*p,*LastSibling;int i;btroot=(BTreeNode *)malloc(sizeof(BTreeNode);添力口开辟内存空 间语句btroot-data=ctroot-data;
7、 树的根节点作为二叉树的根节点 btroot-lchild=btroot-rchild=NULL;addQueueCTree(VisitedCTreeNodesctroot);/树的金艮节 点入队addQueueBTree(VisitedBTreeNodes,btroot);/二叉树的品艮节 点入队 while(!QueueCTreeEmpty(VisitedCTreeNodes)ctnode=delQueueCTree(VisitedCTreeNodes);/树节点出队 btnode=delQueueBTree(VisitedBTreeNodes);/二叉树节点 出队for(i=0;ichi
8、ldreni=NULL) 孩子节点访问完 毕break;p=(BTreeNode *)malloc(sizeof(BTreeNode);分 配二叉树节点p-data=ctnode-childreni-data;p-lchild=p-rchild=NULL;if(i=0)btnode-lchild二p;长子,作为父节点的做孩子 elseLastSibling-rchild=p; 作为上一个兄弟节点的右孩子LastSibling=p;addQueueCTree(VisitedCTreeNodeS,Ctnodechildreni);/树节点进队歹(JaddQueueBTree(VisitedBTre
9、eNodesp); 二叉树节点进门 队列)10/*主函数调用*/ int main()CTreeNode *Tree;BTreeNode *BTree;printf(创立一棵树n);T ree=CreateST ree();printf(,树的先序遍历结果为preorderT ree(T ree);printf(n);T reeToBT ree(T ree,BT ree);printf。1转换后的二叉树,先序遍历的结果为Preorder(BTree);pnntf(n);return 0;ii4测试按照程序内部的结构对程序进行测试,通过测试来检查是否按照设计要求的 规定形式运行。对程序或者函数输
10、入一定参数值,为了确保程序的正确性,可以 多输入几组数据,生成测试数据,取得程序运行时的真实情况、动态情况,进而 进行分析。4.1测试结果分析开始测试程序,编译运行,初始界面如下列图4-1所示:E:shixuntreeDebugzhang.exe*图4-1界面图按提示要求输入结点数,如输入结点数为50,点击Enter键,那么提示下一步输入根结点的数据。如图4-2所示:12图4-2结点图输入根结点数据如“23”,生成如下列图4-3所示:图4-3根结点图13依次按提示输入第二个结点数如“12”及其父节点数“23”,Enter键那么输出图4-4所小界面: E:shixuntreeDebugzhang
11、.exe*图4-4第二个结点图根据提示那么依次输入第三个,第四个,第五个直到到达其节点数目。145总结通过本次程序设计,让我更深入地了解到了树的各种函数的运用,如何运用 各种存储结构创立树,以及在试验中涉及到递归的运用,省去了复杂的算法设 计。在程序运行中不可防止出现各种大大小小的问题,在调试运行时,通过查阅 课本和同学间的讨论,不仅使问题得到了解决,更重要的是使我更透彻地领悟各 种算法的灵活运用。同时在编程的过程中让我对上学期学习的有关c方面的知识 加以复习和捡漏,对所学知识有一个更系统的复习。15参考文献严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社殷人昆.数据结构(第二版).清华大
12、学出版社赵坚,姜梅.数据结构(C语言版).中国水利水电出版社赵坚,姜梅.数据结构学习指导与习题解答(C语言版).中国水利水电出 版社16题目树与二叉树转换实现考核工程考核内容得分平时考核(30分)出勤情况、态度、效率;知识掌握情况、 基本操作技能、知识应用能力、获取知识能力系统设计(20分)分析系统的功能模块编程调试(20分)实现系统的各个功能模块,并完成调试回答下列问题(15分)回答老师针对课程设计提出的问题课程设计报告撰写(10分)严格按照规范要求完成课程设计报告源代码(5分)按照规范要求完成课程设计源代码的排版总评成绩指导教师评语:日期:目录1课程设计目标与任务11.1课程设计目标11.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 转换 实现 10
限制150内