数据结构课程设计二叉树的遍历Word文件下载.docx

上传人:b****5 文档编号:19555912 上传时间:2023-01-07 格式:DOCX 页数:16 大小:19.76KB
下载 相关 举报
数据结构课程设计二叉树的遍历Word文件下载.docx_第1页
第1页 / 共16页
数据结构课程设计二叉树的遍历Word文件下载.docx_第2页
第2页 / 共16页
数据结构课程设计二叉树的遍历Word文件下载.docx_第3页
第3页 / 共16页
数据结构课程设计二叉树的遍历Word文件下载.docx_第4页
第4页 / 共16页
数据结构课程设计二叉树的遍历Word文件下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

数据结构课程设计二叉树的遍历Word文件下载.docx

《数据结构课程设计二叉树的遍历Word文件下载.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计二叉树的遍历Word文件下载.docx(16页珍藏版)》请在冰豆网上搜索。

数据结构课程设计二叉树的遍历Word文件下载.docx

参考文献18

II

1.问题概述

1.1问题描述

创建二叉树并遍历基本要求:

该程序集成了如下功能:

(1)二叉树的建立

(2)递归和非递归先序,中序和后序遍历二叉树

(3)按层次遍历二叉树

(4)交换二叉树的左右子树

(5)输出叶子结点

(6)递归和非递归计算叶子结点的数目

1.2需求分析

分先序遍历,中序遍历和后序遍历三种情况考虑。

1.先序遍历,当二叉树非空时按以下顺序遍历,否则结束操作:

①访问根结点;

②按先序遍历规则遍历左子树;

③按先序遍历规则遍历右子树;

2.中序遍历,当二叉树非空时按以下顺序遍历,否则结束操作:

①按中序遍历规则遍历左子树;

②访问根结点;

③按中序遍历规3遍历右子树。

3.后序遍历,当二叉树非空时按以下顺序遍历,否则结束操作:

①按后序遍历规则遍历左子树;

②按后序遍历规则遍历右子树;

③访问根结点。

3

1.3设计内容和要求

对任意给定的二叉树(顶点数自定)建立它的二叉链表存贮结构,并利用栈

的五种基本运算(清空堆栈、压栈、弹出、取栈顶元素、判栈空)实现二叉树的

先序、中序、后序三种周游,输出三种周游的结果。

1.4流程图及结构图

开始

i=0

NO

YESi<

n

btreetypenewNodeNO

是否为空YES

root=newNodeMultiplex

i++

returnroot

结束

图1.1流程图

4

a

bc

def

图1.2二叉链表存储结构模拟图

2.概要设计

1.二叉树结点数据类型定义为:

template<

typenameT>

structBiNode

{

BiNode<

T>

*rchild,*lchild;

//指向左孩子的指针

Tdata;

//结点数据信息};

2.二叉树数据类型定义为:

classBiTree{

friendostream&

operator<

<

(ostream&

os,BiTree<

&

bt);

pub

lic:

BiTree();

//无参构造函数

BiTree(intm){};

//有参空构造函数

BiTree(Tary[],intnum,Tnone);

//有参构造函数

5

//

析构函数

void

preorder();

递归前序遍历

inorder();

递归中序遍历

postorder();

递归后续遍历

levelorder();

层序遍历

int

count();

//计算二叉树的结点数

display(ostream

&

os);

//打印二叉树,有层次

LevelNum();

计算每一层结点数

PreOrder();

非递归前序遍历

PostOrder();

非递归后序遍历

creat();

创建二叉树

protected:

//以下函数供上面函数调用//对应相同功能

Voidcreat(BiNode<

*&

root);

创建

release(BiNode<

*

删除

Build(T

ary[],int

num,Tnone,int

idx);

用数组创建

二叉树

PreOrder(BiNode<

前序遍历

PostOrder(BiNode<

后续遍历

LevelNum(BiNode<

preorder(BiNode<

inorder(BiNode<

postorder(BiNode<

levelorder(BiNode<

*root);

count(BiNode<

//计算结点数

display(ostream&

os,BiNode<

*root,int

dep);

打印

static

bool

leastCommanAncestor(BiNode<

*root,

T

va,Tvb,

private:

*rootptr;

};

6

2.2源程序代码

#include<

iostream>

usingnamespacestd;

//********************************************************************

*****************

//二叉树结点类的定义

template<

classT>

structBTNode

BTNode<

*Lchild,*Rchild;

BTNode(TnodeValue=T(),BTNode<

*leftNode=NULL,BTNode<

rightNode=NULL)

:

data(nodeValue),Lchild(leftNode),Rchild(rightNode){}//可选择参

数的默认构造函数

******************

//二叉树的建立

voidcreateBinTree(BTNode<

*&

root)

BTNode<

*p=root;

*k;

TnodeValue;

cin>

>

nodeValue;

if(nodeValue==-1)

root=NULL;

7

}

else

root=newBTNode<

();

root->

data=nodeValue;

createBinTree(root->

Lchild);

Rchild);

****************

//二叉树的先序遍历

voidpreOrder(BTNode<

p)

if(p)

cout<

p->

data<

"

"

;

preOrder(p->

//二叉树的中序遍历

voidinOrder(BTNode<

8

inOrder(p->

//二叉树的后序遍历

voidlevelOrder(BTNode<

*&

levelOrder(p->

//统计二叉树中结点的个数

intcountNode(BTNode<

if(p==NULL)return0;

return1+countNode(p->

Lchild)+countNode(p->

***************

//求二叉树的深度

9

intdepth(BTNode<

if(p==NULL)

return-1;

inth1=depth(p->

inth2=depth(p->

if(h1>

h2)return(h1+1);

returnh2+1;

//二叉树的消毁操作

*destroy(BTNode<

*p)//消毁函数,用

来消毁二叉树中的各个结点

returndestroy(p->

deletep;

************

//主函数的设计

intmain()

int>

*rootNode=NULL;

intchoiced=0;

while(true)

10

system("

cls"

);

\n\n\n

---主界面---\n\n\n"

1、创建二叉树

2、先序遍历二叉树\n"

3、中序遍历二叉树

4、后序遍历二叉树\n"

5、统计结点总数

6、查看树深度\n"

7、消毁二叉树

0、退出\n\n"

请选择操作:

choiced;

if(choiced==0)

return0;

elseif(choiced==1)

请输入每个结点,回车确认,并以-1结束:

\n"

createBinTree(rootNode);

elseif(choiced==2)

先序遍历二叉树结果:

preOrder(rootNode);

endl;

pause"

elseif(choiced==3)

中序遍历二叉树结果:

inOrder(rootNode);

11

elseif(choiced==4)

后序遍历二叉树结果:

levelOrder(rootNode);

elseif(choiced==5)

intcount=countNode(rootNode);

二叉树中结点总数为"

count<

elseif(choiced==6)

intdep=depth(rootNode);

此二叉树的深度为"

dep<

elseif(choiced==7)

二叉树已被消毁!

destroy(rootNode);

12

\n\n\n\n\n\t错误选择!

3.调试分析

3.1调试中的问题

创建二叉树:

依次输入二叉树前序遍历序列,构建相应的二叉树。

二叉树遍历:

递归算法、非递归算法测试,调用相应函数进行测试,结果正

确。

求二叉树深度和结点数:

创建一个二叉树,调用相关函数,测试结果正确。

算每层结点数:

调用levelNum()函数,测试结果正确。

调试时遇到诸多问题,其中最主要的问题是死循环问题,在非递归遍历时,

容易进入死循环,经过查找资料、分步调试最终找到循环结束条件,顺利解决各

个难题。

13

4.测试结果

(1)初始界面:

主界面所包含的内容

图4.1初始界面图

(2)运行结果:

进行操作1,输入每个结点,显示结果如下

图4.2创建二叉树

14

进行操作2,执行结果如下:

图4.3二叉树先序遍历

进行操作3,执行结果如下:

图4.4二叉树中序遍历

进行操作4,执行结果如下:

15

图4.5二叉树后序遍历:

进行操作5,执行结果如下:

图4.6统计二叉树节点

进行操作6,执行结果如下:

图4.7查看树深度

16

总结

要能很好的掌握编程,仅仅通过几个简单的程序的编写时无法达成的,更需要大量积累和深入才可能通过本次课程设计。

有关一个课题的所有知识不仅仅是在课本上,多查阅一些资料能够更好的完成课题,这就需要一种能力,即自学能力。

本次课程设计还让我认识到自己的缺点。

本次选的课题是二叉树的遍历,因为本学期所学的就是二叉树等数据结构,所以认为比较适合。

刚开始认为会很简单,但到后来就出现一些难以解决的问题,就像老师请教,并查阅相关资料。

经过慢慢的调试,最终测试成功。

这次课程设计让我所学到的数据结构知识发挥的淋漓尽致,而且还拓展了我的知识面,使我更加熟练的掌握各种方法。

总之,这次课程设计增强了我的自学能力,拓展了我的知识面,让我对数据结构更加了解。

17

参考文献

[1]严蔚敏吴伟民《数据结构(C语言版)》清华大学出版社,

2009年9月

[2]谭浩强《C程序设计(第三版)》清华大学出版社2009年1月

18

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

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1