二叉树遍历实验报告.doc_第1页
二叉树遍历实验报告.doc_第2页
二叉树遍历实验报告.doc_第3页
二叉树遍历实验报告.doc_第4页
二叉树遍历实验报告.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1实验题目二叉树的建立与遍历问题描述建立一棵二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果。2需求分析(1)输入的形式和输入值的范围:以字符形式按先序遍历输入(2)输出的形式:依次按递归先序、中序、后序遍历,非递归先序、中序、后序遍历结果输出(3) 程序所能达到的功能:从键盘接受输入(先序)进行遍历(先序、中序、后序),将遍历结果打印输。(4) 测试数据:ABCDEGF(其中表示空格字符)则输出结果为 先序:ABCDEGF中序:CBEGDFA后序:CGBFDBA3概要设计(1)struct btnodechar data; 数据struct btnode *Lchild;左子数指针struct btnode *Rchild; 右子数指针;struct btnode *createbt(struct btnode *bt ) 初始条件:空二叉树存在操作结果:先序建立二叉树void preOrder(struct btnode *bt)初始条件:二叉树存在递归先序遍历二叉树void preOrder1(struct btnode *bt)初始条件:二叉树存在操作结果:非递归先序遍历void midOrder(struct btnode *bt)初始条件:二叉树存在操作结果:递归中序遍历void midOrder1(struct btnode *bt)初始条件:二叉树存在操作结果:非递归中序遍历void postOrder(struct btnode *bt)初始条件:二叉树存在操作结果:递归后序遍历void postOrder1 (struct btnode *bt)初始条件:二叉树存在操作结果:非递归后序遍历void main() 主函数(2)void main() 主函数*createbtpreOrderpreOrder1midOrdermidOrder1postOrderpostOrder14详细设计struct btnodechar data;struct btnode *Lchild;struct btnode *Rchild;struct btnode *createbt(struct btnode *bt )输入结点数据c检查存储空间将c赋给结点参数p递归建立左子树递归建立右子树void preOrder(struct btnode *bt)判断树是否为空输出根结点数data递归遍历左子树递归遍历右子树void preOrder1(struct btnode *bt)定义栈,结点参数pWhile(栈或p是否为空)While(p!=null)输出根结点数data将根结点压栈遍历左子树提取栈顶元素值栈顶元素出栈访问右子树void midOrder(struct btnode *bt)判断树是否为空递归遍历左子树输出根结点数data递归遍历右子树void midOrder1(struct btnode *bt)定义栈,结点参数pWhile(栈或p是否为空)While(p!=null)将根结点压栈遍历左子树提取栈顶元素值输出根结点数data栈顶元素出栈访问右子树void postOrder(struct btnode *bt)判断树是否为空递归遍历左子树递归遍历右子树输出根结点数datavoid postOrder1 (struct btnode *bt)定义栈,结点参数p,prebt入栈While(栈或p是否为空)提取栈顶元素值if判断p是否为空或是pre的根结点输出根结点数data栈顶元素出栈栈顶元素p赋给pre记录else if右结点非空将右结点压栈 if左结点将左结点压栈void main() struct btnode *root=NULL;root=createbt(root);preOrder(root); midOrder(root); postOrder(root); preOrder1(root); midOrder1(root); postOrder1(root);5.调试分析(1) 先序建立二叉树时,虽用到递归建左右子树,但没有把他们赋值给根节点的左右指针,造成二叉树脱节。(2) 非递归后序遍历时,未考虑到所有条件,只考虑节点的左右结点是否为空,而未考虑结点是否是前一个遍历结点的根节点且不为空。(3) 用栈实现非递归遍历。6.用户使用说明运行环境为vc6.0程序执行后在命令窗口中输入测试数据然后enter7.测试结果8、附录#include #include#include #include#includeusing namespace std;struct btnodechar data;struct btnode *Lchild;struct btnode *Rchild;struct btnode *createbt(struct btnode *bt )/先序建立二叉树char c;c=getchar();if(c= )/如果输入为空,则子树为空bt=NULL;elseif(!(bt=(struct btnode *)malloc(sizeof(struct btnode)/检验bt空间分配是否成功printf(error!);bt-data=c;bt-Lchild=createbt(bt-Lchild);/递归建立左子树bt-Rchild=createbt(bt-Rchild); /递归建立右子树return(bt);void preOrder(struct btnode *bt)/递归先序遍历if(bt!=NULL)printf(%c,bt-data); preOrder(bt-Lchild); preOrder(bt-Rchild);void preOrder1(struct btnode *bt)/非递归先序遍历int i=0;struct btnode *p;stack s;定义栈p=bt; while(p!=NULL|!s.empty()while(p!=NULL)printf(%c,p-data);s.push(p);/将根结点压栈p=p-Lchild;/遍历左子树if(!s.empty()p=s.top();/提取栈顶元素值s.pop();/栈顶元素出栈p=p-Rchild;/访问右子树void midOrder(struct btnode *bt)/递归中序遍历if(bt!=NULL)midOrder(bt-Lchild); printf(%c,bt-data); midOrder(bt-Rchild);void midOrder1(struct btnode *bt)/非递归中序遍历int i=0;struct btnode *p;stack s;p=bt;while(p!=NULL|!s.empty()while(p!=NULL)s.push(p);p=p-Lchild;if(!s.empty()p=s.top();printf(%c,p-data);s.pop();p=p-Rchild;void postOrder(struct btnode *bt)/递归后序遍历if(bt!=NULL) postOrder(bt-Lchild); postOrder(bt-Rchild); printf(%c,bt-data); void postOrder1 (struct btnode *bt)/非递归后序遍历struct btnode *p,*pre=NULL; stack s;s.push(bt); while(!s.empty()p=s.top();if(p-Lchild=NULL&p-Rchild=NULL)|(pre!=NULL&(pre=p-Lchild|pre=p-Rchild)/判断p是否为空或是pre的根结点printf(%c,p-data);s.pop();pre=p;elseif(p-Rchild!=NULL) s.push(p-Rchild);/先将右结点压栈if(p-Lchild!=NULL)s.push(p-Lchild);/后将左结点压栈,因为先入后出void main() /主函数struct btnode *root=NULL;root=createbt(root);printf(先序递归遍历结果:); preOrder(root); printf(中序递归遍历结果:); midOrder(root);printf(后序递归

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论