数据结构课程设计先中后序遍历Word文件下载.docx

上传人:b****1 文档编号:5649079 上传时间:2023-05-05 格式:DOCX 页数:32 大小:18.98KB
下载 相关 举报
数据结构课程设计先中后序遍历Word文件下载.docx_第1页
第1页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第2页
第2页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第3页
第3页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第4页
第4页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第5页
第5页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第6页
第6页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第7页
第7页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第8页
第8页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第9页
第9页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第10页
第10页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第11页
第11页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第12页
第12页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第13页
第13页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第14页
第14页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第15页
第15页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第16页
第16页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第17页
第17页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第18页
第18页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第19页
第19页 / 共32页
数据结构课程设计先中后序遍历Word文件下载.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构课程设计先中后序遍历Word文件下载.docx

《数据结构课程设计先中后序遍历Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计先中后序遍历Word文件下载.docx(32页珍藏版)》请在冰点文库上搜索。

数据结构课程设计先中后序遍历Word文件下载.docx

9

10

12

问题描述:

根据运行时输入的先序序列,创建一棵二叉树,分别对其

进行先序、中序、后序、层序遍历,并显示遍历结果。

voidCreateBTree(BTree&

T)

//

按先序次序输入,构造二叉树

voidPreOrder(BTreeT)

递归先序遍历

voidInOrder(BTreeT)

递归中序遍历

voidPostOrder(BTreeT)

递归后序遍历

voidLevelOrder(BTreeT)

层序遍历

voidNRPreOrder(BTreebt)

非递归先序遍历

voidNRInOrder(BTreebt)

非递归中序遍历

voidNRPostOrder(BTreebt)

非递归后序遍历

voidmain()

二叉树的建立与遍历实现

此次课程设计遍历算法的框架图

遍历算法

非递归遍

递归遍历历

先序遍历中序遍历后序遍历先序遍历中序遍历后序遍历

此次课程设计所用的三组二叉树

A

BCBC

DEF

GHA

BF

CG

DEH

本设计所使用的存储结构:

typedefcharElemType;

//定义二叉树结点值的类型为字符型

typedefstructbnode{//二叉链表结构定义

ElemTypedata;

structbnode*lchild,*rchild;

}Bnode,*BTree;

typedefstruct{

BTreeptr;

inttag;

}stacknode;

T){//按先序次序输入,构造二叉链

表表示的二叉树T,#表示空树

charch;

ch=getchar();

if(ch=='

#'

)T=NULL;

//读入#时,将相应节点指针置空

else{

if(!

(T=(Bnode*)malloc(sizeof(Bnode))))

printf("

创建失败!

"

);

//生成结点空间

T->

data=ch;

CreateBTree(T->

lchild);

//构造二叉树的左子树

rchild);

//构造二叉树的右子树

}

voidPreOrder(BTreeT){//递归先序遍历

if(T){

%c"

T->

data);

PreOrder(T->

voidInOrder(BTreeT){//递归中序遍历

InOrder(T->

voidPostOrder(BTreeT){//递归后序遍历

PostOrder(T->

voidLevelOrder(BTreeT){//层序遍历

BTreeQ[MAX];

intfront=0,rear=0;

BTreep;

if(T){//根结点入队

Q[rear]=T;

rear=(rear+1)%MAX;

while(front!

=rear){

p=Q[front];

//队头元素出队

front=(front+1)%MAX;

p->

if(p->

lchild){//左孩子不为空,入队

Q[rear]=p->

lchild;

rchild){//右孩子不为空,入队

rchild;

voidNRPreOrder(BTreebt){//非递归先序遍历BTreestack[MAX],p;

inttop;

if(bt!

=NULL){

top=0;

p=bt;

while(p!

=NULL||top>

0){

%c"

stack[top]=p;

//预留p指针在数组中

top++;

p=p->

if(top>

top--;

p=stack[top];

///*左子树为空,进右子树*/

voidNRInOrder(BTreebt){//非递归中序遍历BTreestack[MAX],p;

//预留p指针在数组中

/*左子树为空,进右子树*/

voidNRPostOrder(BTreebt){//非递归后序遍历stacknodes[MAX],x;

BTreep=bt;

if(bt!

do{

while(p!

=NULL){//遍历左子树

s[top].ptr=p;

s[top].tag=1;

//标记为左子树

while(top>

0&

&

s[top-1].tag==2){

x=s[--top];

p=x.ptr;

//tag为R,表示右子树

访问完毕,故访问根结点

s[top-1].tag=2;

//遍历右子树

p=s[top-1].ptr->

}while(top>

0);

一组测试树

运行时界面

这个程序的代码较为简单,可以实现了二叉树的三种递归遍历算法和三种非递归遍历算法还有层序遍历算法,想要改进的话可以在选择功能上下手,建立的时候提示更人性化,对输入的数据进行有效性验证,也可以改进为对遍历算法进行选择等等。

二叉树这个数据结构几乎在每一本的数据结构的书都作为

重点内容讲述,足见其在算法和程序设计界的重要地位。

但是,

到目前为止,自己还没有真正体验到它的威力,可能是学习的还

不够深刻。

像二叉树遍历的算法,用递归的算法只是简单的几行

代码,然后就可以实现输出遍历次序。

对于非递归的思想,要用

到栈这个数据结构,但是对于二叉树遍历问题来说非递归要较递

归复杂。

程序一开始总是出现语法错误,改了很多次也上网查了相关资料,才最后改为现在可以成功运行的程序。

在这个过程中,我体会到开发工程师的感觉了,就是要用挑剔的眼光想问题并且不断地改进自己的程序。

通过这次课程设计逐渐提高了自己的程序设计和调试能力,

通过上机实习,严整自己设计算法的正确性,学会了有效利用基本调试方法,查找出代码中的错误并且修改。

我会继续我的兴趣编写程序的,相信在越来越多的尝试之后,自己会不断进步和提高。

6.附录

#include<

stdlib.h>

stdio.h>

#include<

iostream.h>

#defineMAX10//结点个数不超过

10个

T){//按先序次序输入,构造二叉链表表

示的二叉树T,#表示空树

(T=(Bnode*)malloc(sizeof(Bnode))))printf("

创建

失败!

voidPostOrder(BTreeT){//递归后序遍历if(T){

voidNRPreOrder(BTreebt){//非递归先序遍历

BTreestack[MAX],p;

voidNRInOrder(BTreebt){//非递归中序遍历

voidNRPostOrder(BTreebt){//非递归后序遍历

stacknodes[MAX],x;

//tag为R,表示右子树访

问完毕,故访问根结点

voidmain(){//主函数

BTreeT;

T=NULL;

intselect;

while

(1){

\n\n\n请选择要执行的操作:

\n"

1.创建二叉树\n"

2.二叉树的递归遍历算法(前、中、后)\n"

3.二叉树的层次遍历算法\n"

4.二叉树的非递归遍历算法(前、中、后)\n"

0.退出\n"

输入:

"

cin>

>

select;

switch(select){

case0:

return;

case1:

\n请按先序次序输入各结点的值,以#表示空

树(输入时可连续输入):

CreateBTree(T);

break;

case2:

T)printf("

\n未建立树,请先建树!

\n\n递归先序遍历:

PreOrder(T);

\n递归中序遍历:

InOrder(T);

\n递归后序遍历:

PostOrder(T);

break;

case3:

\n\n层序遍历:

LevelOrder(T);

case4:

\n\n非递归先序遍历:

NRPreOrder(T);

\n非递归中序遍历:

NRInOrder(T);

\n非递归后序遍历:

NRPostOrder(T);

default:

\n\n请确认选择项:

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

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2