收藏 分享(赏)

数据结构课程设计树与二叉树的转换.doc

上传人:精品资料 文档编号:10742661 上传时间:2020-01-04 格式:DOC 页数:11 大小:262KB
下载 相关 举报
数据结构课程设计树与二叉树的转换.doc_第1页
第1页 / 共11页
数据结构课程设计树与二叉树的转换.doc_第2页
第2页 / 共11页
数据结构课程设计树与二叉树的转换.doc_第3页
第3页 / 共11页
数据结构课程设计树与二叉树的转换.doc_第4页
第4页 / 共11页
数据结构课程设计树与二叉树的转换.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、数据结构课程设计0数据结构课程设计报告设计题目: _树与二叉树的转换_姓名: _李锦_学号: _211214011_专业: _物联网工程_院系:_计算机科学与技术 _班级: _1205_指导教师: _高秀梅_2014 年 2 月 14 日 数据结构课程设计1目 录一、问题描述 2二、基本要求 2三、概要设计 2四、数据结构设计 2五、算法设计 31、算法分析 32、算法实现 3六、程序测试与实现 61、函数之间的调用关系 62、主程序 63、测试数据 84、测试结果 8七、调试分析 10八、遇到的问题及解决办法 10九、心得体会 10数据结构课程设计2一、问题描述完成树与二叉树的转换二、基本要

2、求1、 树采用双亲表示法2、 能够将树转换为二叉树3、 对转换的二叉树进行算法设计统计人一结点的孩子数4、 利用转换的二叉树计算树的高度三、概要设计操作集合:(1) CTreeNode *SearchCTree(CTreeNode *root ,char data) 查找树结点(2) CTreeNode *CreateSTree() 生成树(3) void preorderTree(CTreeNode *ctroot) 树的遍历(4) void PrintTree(CTreeNode *troot,int depth) 树的输出(5 void initQueueCTree(QueueCTree

3、 */数据域,采用 char 星struct CTreeNode *childrenDEGREE;/指向孩子节点的指针域;struct BTreeNodechar data;/数据域BTreeNode *lchild,*rchild;/左右孩子节点的指针;数据结构课程设计3/树队列结构体类型struct QueueCTreeCTreeNode *CTreeArrayMAX_NODE_NUM;/结构体指针数组,存放节点的地址/struct nodeCTree *next;int CTreeFront,CTreeRear;/二叉树队列结构类型struct QueueBTreeBTreeNode *

4、BTreeArrayMAX_NODE_NUM;/结构体指针数组,存放节点的地址/struct nodeBTree *next;int BTreeFront,BTreeRear;五、算法设计1、算法分析将树转换成二叉树的步骤是: (1)加线。就是在所有兄弟结点之间加一条连线; (2)抹线。就是对树中的每个结点,只保留他与第一个孩子结点之间的连线,删除它与其它孩子结点之间的连线; (3)旋转。就是以树的根结点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明。2、算法实现void TreeToBTree(CTreeNode *ctroot,BTreeNode * QueueBTree *Visi

5、tedBTreeNodes;/辅助队列 initQueueCTree(VisitedCTreeNodes); initQueueBTree(VisitedBTreeNodes);/初始化队列 CTreeNode *ctnode; BTreeNode *btnode,*p,*LastSibling; int i; btroot=new BTreeNode;/添加开辟内存空间语句 btroot-data=ctroot-data;/树的根节点作为二叉树的根节点 btroot-lchild=btroot-rchild=NULL; addQueueCTree(VisitedCTreeNodes,ctro

6、ot);/树的跟节点入队 addQueueBTree(VisitedBTreeNodes,btroot);/二叉树的跟节点入队 数据结构课程设计4while(!QueueCTreeEmpty(VisitedCTreeNodes) ctnode=delQueueCTree(VisitedCTreeNodes);/树节点出队 btnode=delQueueBTree(VisitedBTreeNodes);/二叉树节点出队 for(i=0;ichildreni=NULL)/孩子节点访问完毕 break; p=new BTreeNode;/分配二叉树节点 p-data=ctnode-childreni

7、-data; p-lchild=p-rchild=NULL;if(i=0)btnode-lchild=p;/长子,作为父节点的做孩子 else LastSibling-rchild=p;/作为上一个兄弟节点的右孩子LastSibling=p;addQueueCTree(VisitedCTreeNodes,ctnode-childreni);/树节点进队列addQueueBTree(VisitedBTreeNodes,p);/二叉树节点进门队列3、算法流程图数据结构课程设计5开始主菜单树的信息图 二叉树的信息图输入信息生成树树的结构图 树的前序遍历二叉树的结构图二叉树的前序遍历二叉树的深度二叉树

8、的节点孩子数树转化为二叉树输入树的节点数输入树的节点数输出结果退出程序数据结构课程设计6六、程序测试与实现1、函数之间的调用关系2、主程序int main()CTreeNode *Tree;BTreeNode *BTree;int x=0;char n,i,j,k;while(1)p:n=menu();Main()Menu()CTreeNode *Tree;TreeToBTree(Tree,BTree)Preorder(BTree)preorderTree(Tree)PrintTree(Tree,10)PrintIn(BTree,5)数据结构课程设计7if(n=1)while(1)i=Tree

9、menu();switch(i)case 1:Tree=CreateSTree();break;case 2:PrintTree(Tree,10);cout“ntt 按任意键返回 .n“;getch();break;case 3:preorderTree(Tree);cout“ntt 按任意键返回.n“;getch();break;case 4:goto p;break;if(n=2)TreeToBTree(Tree,BTree);while(1) j=Btreemenu();switch(j)case 1:PrintIn(BTree,5);cout“ntt 按任意键返回.n“;getch()

10、;break;case 2:Preorder(BTree);cout“ntt 按任意键返回 .n“;getch();break;case 3:coutFindDepth(BTree);cout“ntt 按任意键返回.n“;getch();break;case 4:count(BTree);cout“ntt 按任意键返回.n“;getch();break;case 5:goto p;break;if(n=3)break;return 0;数据结构课程设计83、测试数据a b c d e 4、测试结果数据结构课程设计9数据结构课程设计10七、调试分析首先根据指令,输入信息,生成一个树后,再将生成的

11、树转化成二叉树,然后输出二叉树的结构图,二叉树的前序遍历结果以及二叉树的深度和节点孩子数八、遇到的问题及解决办法调试时遇到诸多问题,其中最主要的问题是死循环问题,在非递归遍历时,容易进入死循环,经过查找资料、分步调试最终找到循环结束条件,顺利解决各个难题。九、心得体会通过本次课程设计,我发现,有关一个课题的所有知识不仅仅是在课本上,多查阅一些资料能够更好的完成课题,这就需要一种能力,即自学能力。本次课程设计还让我认识到自己的缺点。本次选的课题是二叉树的遍历,因为本学期所学的就是二叉树等数据结构,所以认为比较适合。刚开始认为会很简单,但到后来就出现一些难以解决的问题,就像老师请教,并查阅相关资料。经过慢慢的调试,最终测试成功。 这次课程设计让我所学到的数据结构知识发挥的淋漓尽致,而且还拓展了我的知识面,使我更加熟练的掌握各种方法。 总之,这次课程设计增强了我的自学能力,拓展了我的知识面,让我对数据结构更加了解。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报