二叉树遍历课程设计Word格式文档下载.docx
- 文档编号:21059018
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:13
- 大小:136.34KB
二叉树遍历课程设计Word格式文档下载.docx
《二叉树遍历课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《二叉树遍历课程设计Word格式文档下载.docx(13页珍藏版)》请在冰豆网上搜索。
3.2.二叉树的非递归前序遍历示意图
图3.2二叉树前序遍历示意图
3.3.二叉树的非递归中序遍历示意图
图3.3二叉树中序遍历示意图
3.4.二叉树的后序非递归遍历示意图
图3.4二叉树后序遍历示意图
四.详细设计
4.1创建二叉树
(1)定义二叉树结点值的类型为字符型。
#definem50
typedefstructNode
{
chardata;
structNode*Lchild;
structNode*Rchild;
}bitnode,*bitree;
typedefstruct
(2)结点个数不超过50个。
(3)按先序次序输入,构造二叉链表表示的二叉树T,空格表示空树。
4.2二叉树的非递归前序遍历算法
voidpreorder(bitreeroot)
SeqStackS;
bitreep;
InitStack(&
S);
p=root;
while(p!
=NULL||!
isempty(&
S))
{
while(p!
=NULL)
{
printf("
%c"
(p->
data));
push(&
S,p);
p=p->
Lchild;
}
if(!
pop(&
S,&
p);
Rchild;
}
}
a.访问结点的数据域。
b.指针指向p的左孩子结点。
c.从栈中弹出栈顶元素。
d.指针指向p的右孩子结点。
4.3二叉树的非递归中序遍历算法
voidinorder(bitreeroot)
if(p!
else
a.指针指向p的左孩子结点。
b.从栈中弹出栈顶元素。
c.访问结点的数据域。
4.4二叉树的非递归后序遍历算法
voidpostorder(bitreeroot)
bitreep,q;
while(p!
=NULL||!
if(p!
push(&
S,p);
p=p->
else
GetTop(&
S,&
if(p->
Rchild==NULL||p->
Rchild==q)
printf("
pop(&
q=p;
p=NULL;
root是要遍历树的根指针,后序遍历要求在遍历完左右子树后,再访问根。
需要判断根结点的左右子树是否均遍历过。
也可采用标记法,结点入栈时,配一个标志tag一同入栈
(1:
遍历左子树前的现场保护,2:
遍历右子树前的现场保护)。
首先将bt和tag(为1)入栈,遍历左子树;
返回后,修改栈顶tag为2,遍历右子树;
最后访问根结点。
五.测试数据与分析
六.源代码
非递归算法实现:
1.新建一个工程,再在工程中新建一个头文件,输入下列程序:
bitreestack[m];
/*用来存放栈中元素的一维数组*/
inttop;
}SeqStack;
voidInitStack(SeqStack*s)/*初始化栈*/
s->
top=-1;
intisempty(SeqStack*s)/*判断栈是否为空*/
if(s->
top==-1)
return1;
return0;
intpush(SeqStack*s,bitreex)/*进栈*/
top==m-1)
return(0);
s->
top++;
stack[s->
top]=x;
return
(1);
intpop(SeqStack*s,bitree*x)/*出栈*/
*x=s->
top];
top--;
intGetTop(SeqStack*s,bitree*x)/*去栈顶元素*/
voidpreorder(bitreeroot)/*先序遍历二叉树*/
voidinorder(bitreeroot)/*中序遍历二叉树*/
voidpostorder(bitreeroot)/*后序遍历二叉树*/
2.再在工程中新建一个C++源文件,将它另存为以.c为扩展名的文件,输入下列程序:
#include"
stdio.h"
malloc.h"
order.h"
bitreecreatbitree()
charch;
bitreebt;
ch=getchar();
if(ch=='
.'
)
bt=NULL;
bt=(bitree)malloc(sizeof(bitnode));
bt->
data=ch;
Lchild=creatbitree();
Rchild=creatbitree();
returnbt;
voidmain()
inta;
bitreebt;
请输入二叉树的线序序列,空子树用'
表示:
\n"
);
bt=creatbitree();
while(a!
=0)
{printf("
需要先序遍历输出请输入1,中序遍历请输入2,后序遍历请输入3,结束输入0:
"
scanf("
%d"
&
a);
switch(a)
case
(1):
preorder(bt);
break;
case
(2):
inorder(bt);
case(3):
postorder(bt);
case(0):
总结
1.“数据结构”是计算机类各专业的核心课程,也是其他诸多类专业的重要选修课。
我通过学习这门课,可以为理解、应用和开发程序提供技术和方法支持,为后续课程的学习提供重要思想和方法基础。
同时对于我的逻辑思维培养和程序设计思想体系的建立有着重要的影响。
2.在调试过程中,碰到诸多问题,比如定义表长过小,处理记录数量错误时程序的异常,记录冲突次数等等。
处在不断调试,询问老师,和同学探讨之后,终于解决,运行成功。
参考文献:
【1】耿国华数据结构——C语言描述高等教育出版社
【2】严蔚敏数据结构——C语言描述清华大学出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 遍历 课程设计