掌握用指针类型描述、建立、遍历二叉树的运算。.doc

掌握用指针类型描述、建立、遍历二叉树的运算。.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
掌握用指针类型描述、建立、遍历二叉树的运算。

洛阳理工学院实验报告 系部 计算机系 班级 B110505 学号 姓名 李满意 课程名称 数据结构 实验日期 2013.04.24 实验名称 二叉树的建立及遍历 成绩 实验目的: 掌握二叉树的结构特征,掌握用指针类型描述、二叉树的运算。 电脑一台,VC++6.0软件。 实验内容与算法思想: 内容: 建立一棵用二叉链表方式存储的二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果。 【基本要求】 从键盘接受输入先序序列,以二叉链表作为存储结构,建立二叉树(以先序来建立)并对其进行遍历(先序、中序、后序),然后将遍历结果打印输出。要求采用递归和非递归两种方法实现。 【测试数据】 ABC~~DE~G ~~F ~~~(其中~表示空格字符) 输出结果:先序序列为ABCDEGF 中序序列为CBEGDFA 后序序列为CGEFDBA 算法思想: 程序中使用递归和非递归两种方法实现对二叉树的先序、中序及后序遍历。递归就是对自身的函数调用,递归遍历中访问根结点、遍历左子树、遍历右子树语句的的顺序决定了是在先序、中序、后序。非递归先序遍历从根结点开始,只要当前结点存在,或者栈不空,则重复操作:①从当前结点开始,访问根结点、出栈,遍历左子树;②退栈,遍历左子树。非递归中序遍历从根结点开始,只要当前结点存在,或者栈不空,则重复操作:①如果当前结点存在,则进栈并遍历左子树;②否则退栈并访问,然后遍历右子树;非递归后序遍历从根结点开始,只要当前结点存在,或者栈不空,则重复操作:①从当前结点开始,进栈并遍历左子树,直到左子树为空;②如果栈顶结点的右子树为空,或者栈顶结点的右孩子为刚访问过的结点,则退栈并访问,然后将当前结点指针置为空;③否则,遍历右子树。 运行结果: 实验总结: 通过这次实验我对二叉树有了更熟练的掌握,更清晰的认识。熟练掌握了二叉树的遍历,并对使用非递归实现对二叉树的遍历,使得我对非递归也更加熟练的掌握,对以往知识起到了复习巩固的作用。另外,感觉自己的编程能力也在不断的进步之中,继续努力,相信自己的数据结构会学的很好,相信自己的编程技能也会提高的,继续努力。 附:源程序: #includestdio.h #includestdlib.h typedef char DataType; #define FALSE 0 #define TRUE 1 typedef struct Node { DataType data; struct Node *Lchild; struct Node *Rchild; }BiTNode,*BiTree; typedef BiTree StackElementType; #define Stack_Size 50 typedef struct { StackElementType elem[Stack_Size]; int top; }SeqStack; void InitStack(SeqStack *S) { S-top=-1; } int IsEmpty(SeqStack *S) { if(S-top==-1)return 1; else return 0; } void GreatBiTree(BiTree *root) { char c; c=getchar(); if(c== ) *root=NULL; else { *root=(BiTNode *)malloc(sizeof(BiTNode)); (*root)-data=c; GreatBiTree((*root)-Lchild); GreatBiTree((*root)-Rchild); } } void PreOrder(BiTree root) /*先序遍历二叉树, root为指向二叉树(或某一子树)根结点的指针*/ { if (root!=NULL) { printf(%c,root-data); /*访问根结点*/ PreOrder(root-Lchild); /*先序遍历左子树*/ PreOrder(root-Rchild); /*先序遍历右子树*/ } } void InOrder(BiTree root) /*中序遍历二叉树, root为指向二叉树(或某一子树)根结点的指针*/ { if (root!=NULL) { InOrder(root -Lchild); /*中序遍历左子树*/ printf(%c,root-data); /*访问根结点*/

文档评论(0)

zhuliyan1314 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档