数据结构课程设计二叉树的基本操作Word文档格式.docx

上传人:b****5 文档编号:18201347 上传时间:2022-12-14 格式:DOCX 页数:10 大小:61.88KB
下载 相关 举报
数据结构课程设计二叉树的基本操作Word文档格式.docx_第1页
第1页 / 共10页
数据结构课程设计二叉树的基本操作Word文档格式.docx_第2页
第2页 / 共10页
数据结构课程设计二叉树的基本操作Word文档格式.docx_第3页
第3页 / 共10页
数据结构课程设计二叉树的基本操作Word文档格式.docx_第4页
第4页 / 共10页
数据结构课程设计二叉树的基本操作Word文档格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

数据结构课程设计二叉树的基本操作Word文档格式.docx

《数据结构课程设计二叉树的基本操作Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计二叉树的基本操作Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。

数据结构课程设计二叉树的基本操作Word文档格式.docx

三、数据结构和算法设计

用一个字符型保存节点数据,分别定义两个

BiTree.h中实现相关的功能。

3.1二叉链表的设计

1.

typedef

structBiNode{

2.

char

data;

3.

struct

BiNode*lchild;

//

左孩子

4.

BiNode*rchild;

右孩子

5.

}BiTree;

structBiNode类型的指针来指向左孩子和右孩子。

3.2队列的实现

typedefstruct

{

ElemType*data;

inthead;

//

队头指针

inttail;

队尾指针

}SqQueue;

队列主要用于二叉树遍历过程中的层序遍历,从根节点开始分别将左右孩子放入队列,然后从对头开

始输出。

队列的相关操作封装在SqQueue.h中,包括入队、出队、判断队列是否为空等操作。

四、全局函数的设计

本程序中应用了一些全局函数,本着用到那个函数就把哪个函数设为全局函数的原则,抽象出了以下全局函数:

4.1全局函数列表

(1)BiTree*createBinaryTree(BiTree*b)

本函数用于建立二叉树

(2)voidTraverse(BiTree*b)

本函数用于遍历二叉树

(3)voidPreOrderTraverse(BiTree*b)

本函数用于前序遍历二叉树

(4)voidInOrderTraverse(BiTree*b)

本函数用于中序遍历二叉树

(5)voidPostOrderTraverse(BiTree*b)

本函数用于后序遍历二叉树

(6)voidLevelOrderTraverse(BiTree*b)

本函数用于层序遍历二叉树

(7)voidgetLeavesNum(BiTree*b)

本函数用于统计叶子结点个数

(8)intgetHeight(BiTree*b)

本函数用于求二叉树的深度

(9)voidswap(BiTree*b)

本函数用子树交换

(10)voiddisplayMenu()

本函数用于展示菜单

4.2全局函数在具体系统中的分布

BiTree.h

此文件为二叉树的头文件,包含上述所有全局函数

五、功能实现

二叉树的基本操作这个程序的主要功能就是建立二叉树,然后运用先序、中序等遍历方法遍历二叉树,然后还有统计二叉树的叶子结点个数、求二叉树的深度以及进行子树的交换。

5.1二叉树的基本操作流程图如下

菜单界面如下:

5.2二叉树的基本操作的代码如下

5.2.1二叉树的建立

1.//按照前序输入二叉树结点的值,“#”表示空

2.BiTree*createBinaryTree(BiTree*b){

3.charch;

//定义变量用于储存输入的字符

scanf("

%c"

&

ch);

if(ch=='

#'

){

6.

b=NULL;

7.

}

8.

else{

9.

if((b=(BiTree*)malloc(sizeof(BiTree)))!

=NULL){

//如果内存分配成功就执行下面操

10.

//生成根节点

11.

b->

data=ch;

12.

//构造左子树

13.

lchild=createBinaryTree(b->

lchild);

14.

//构造右子树

15.

rchild=createBinaryTree(b->

rchild);

16.

17.

18.

returnb;

19.

5.2.2二叉树的遍历

如图所示选择遍历后有三种方案可供选择:

1)前序遍历

voidPreOrderTraverse(BiTree*b){

if(b==NULL){

return;

//首先打印结点数据

printf("

%c"

b->

data);

//再先序遍历左子树

PreOrderTraverse(b->

//最后先序遍历右子树

5

2)中序遍历

//中序遍历

voidInOrderTraverse(BiTree*b){

//首先中序遍历左子树

InOrderTraverse(b->

//再打印结点数据

//最后中序遍历右子树

3)后序遍历

//后序遍历

voidPostOrderTraverse(BiTree*b){

//首先后序遍历左子树

PostOrderTraverse(b->

//再后序遍历右子树

//最后打印结点数据

4)层序遍历

1.//层序遍历

2.voidLevelOrderTraverse(BiTree*b){

3.SqQueue*s=initSqQueue();

4.BiTree*temp;

5.if(b){

6.append(s,*b);

7.while(!

isEmpty(s)){

5.2.3统计叶子结点个数

//统计叶子节点

int

count;

//全局变量,如果出现叶子结点就加一

void

getLeavesNum(BiTree*b){

if(b){

if(!

lchild&

&

!

rchild){

count++;

getLeavesNum(b->

5.3.4求二叉树的深度

1.//求二叉树的深度

2.intgetHeight(BiTree*b){

3.intleftHeight,rightHeight;

4.if(!

b){

5.return0;

6.}

7.leftHeight=getHeight(b->

8.rightHeight=getHeight(b->

9.returnleftHeight>

rightHeight?

leftHeight+1:

rightHeight+1;

10.}

5.2.5子树交换

1.//子树交换

BiTree*temp;

//临时变量,用于交换

voidswap(BiTree*b){

temp=b->

lchild;

lchild=b->

rchild;

rchild=temp;

swap(b->

部分运行结果截图如下:

建立二叉树:

统计叶子节点个数:

 

求二叉树的深度:

六、参考文献

1.StephenPrata.《CPrimerPlus(第6版)中文版》.人民邮电出版社.2016年

2.CSDN博客:

3.谭浩强.《C程序设计(第四版)》.清华大学出版社.

4.严蔚敏《数据结构》

c语言版第二版人民邮电出版社

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

当前位置:首页 > 党团工作 > 思想汇报心得体会

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

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