- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构中二叉树实验.
中南大学《数据结构与算法》课程实验实验报告题 目二叉树的基本操作学生姓名 张悦学生学号3901090516 专业班级 软件0905班2010-5-15需求分析本程序主要是对数据结构类型中的树结构进行操作,并对树结构分别进行先序遍历、中序遍历、后序遍历和统计结点个数的操作。并采用非递归的编程方法,分别统计二叉树的节点个数、度为1、度为2和叶子节点的个数,以及数据值的最大值和最小值。输入的形式:按先序的顺序输入数据,先做孩子,再右孩子,有数据的地方输入数据,没有数据的地方输入“#”。输入值的范围:数字和字母(大小写都可)。输出的形式:按所选择的遍历顺序输出树结构中的数据。程序所能达到的功能:创建一棵树,并可以遍历树结构中的所有数据。测试数据:(以如下为例)输入形式:A B D # # E # # C # #;先序遍历:D B E A C;中序遍历:D E B C A;后序遍历:D E B C A;节点个数:5;度为1的节点个数:0;度为2的节点个数:2;叶子节点的个数:3;概要设计本程序所用到的是树结构的数据类型,每个结点由数据、左指针和右指针构成,如下定义结构体:struct TreeNode{char data;struct TreeNode *right;struct TreeNode *left;};另外还用到了栈类型,但栈不是本次实验终点,所以不以详细说明。本程序中在main函数中主要用到了12个函数,分别为createTree函数、PreOrder函数、InOrder函数、PostOrder函数、SumNode函数、Non_SumNode函数、SumeOne函数、SumeTwo函数、MaxData函数、MinData函数和Leaf函数。这些函数分别负责不同的功能。其中,createTree函数是用来创建树的;PreOrder函数、InOrder函数、PostOrder函数这三个函数,分别是先序遍历、中序遍历和后序遍历操作的函数;SumNode函数、Non_SumNode函数、SumeOne函数和SumeTwo函数分别是用来统计总共节点、度为1、度为2和叶子节点的个数;MaxData函数、MinData函数是用来找到最大值和最小值的。用main函数来调用这些函数,其中createTree函数、PreOrder函数、InOrder函数、PostOrder函数和SumNode函数都用到了递归的思想,都进行了自我调用;而Non_SumNode函数、SumeOne函数、SumeTwo函数、MaxData函数、MinData函数和Leaf函数则是非递归的函数。main函数中还有一个辅助函数toChar函数,用来将int型转化成char型,这主要用在找最大最小值的输出上面。详细设计此程序中,采用了一个自定义结构体的数据类型,称为树结构,如下:struct TreeNode{char data;struct TreeNode *right;struct TreeNode *left;};typedef struct TreeNode Tnode;Tnode* createTree(Tnode *TN)//创建一棵树{char ch;cinch;if(ch==#)//“#”未没有数据的结点,指向该结点的指针变为NULL{TN=NULL;}else{TN = new Tnode;//创建一个新的空间if(TN==NULL)//防止内存溢出{cout内存溢出!endl;return NULL;}TN-data=ch;TN-left=createTree(TN-left);//采用了递归思想TN-right=createTree(TN-right);}return TN;}Tnode* PreOrder(Tnode *TN)//先序遍历{if(TN!=NULL){coutTN-data ;PreOrder(TN-left);PreOrder(TN-right);}return TN;}Tnode* InOrder(Tnode *TN)//中序遍历{if(TN!=NULL){InOrder(TN-left);coutTN-data ;InOrder(TN-right);}return TN;}Tnode* PostOrder(Tnode *TN)//后序遍历{if(TN!=NULL){ PostOrder(TN-left); PostOrder(TN-right); coutTN-data ;}returnTN;}int SumNode(Tnode *TN)//用递归的方法统计树中结点个数{static int n=0;//将n定义为静态数据类型,可是使其不会因为递归的调用而改变if(TN!=NULL){ SumNode(TN-lef
文档评论(0)