实验五二叉树遍历.docx

上传人:b****3 文档编号:3182578 上传时间:2022-11-19 格式:DOCX 页数:21 大小:46.91KB
下载 相关 举报
实验五二叉树遍历.docx_第1页
第1页 / 共21页
实验五二叉树遍历.docx_第2页
第2页 / 共21页
实验五二叉树遍历.docx_第3页
第3页 / 共21页
实验五二叉树遍历.docx_第4页
第4页 / 共21页
实验五二叉树遍历.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

实验五二叉树遍历.docx

《实验五二叉树遍历.docx》由会员分享,可在线阅读,更多相关《实验五二叉树遍历.docx(21页珍藏版)》请在冰豆网上搜索。

实验五二叉树遍历.docx

实验五二叉树遍历

2014秋学期算法与数据结构

 

项目名称:

二叉树的遍历

指导老师:

金萍老师

项目时间:

2014-11-8

项目成员:

张峻峰瞿子晶

 

一.引言2

1.1编写目的2

1、熟练掌握二叉树的存储结构。

2

2、熟练掌握二叉树基本操作的实现。

2

1.2参考资料2

二.项目介绍2

2.1项目简介2

2.2软件运行环境2

三.需求分析2

3.1总体需求分析2

3.2主界面需求分析2

四.总体模块设计3

1.操作菜单:

3

2.选择菜单:

3

3.二叉树的创建:

3

4.二叉树的销毁:

3

5.先序遍历二叉树:

3

6.中序遍历二叉树:

3

7.后序遍历二叉树:

3

8.层序遍历二叉树:

3

10.测量二叉树深度:

3

五.详细设计4

1.主函数4

2.菜单函数4

3.二叉树操作菜单4

4.创建二叉树函数4

5.销毁二叉树函数4

6.先序遍历二叉树4

7.中序遍历二叉树5

8.后序遍历二叉树5

9.层序遍历二叉树5

10.叶子结点的数目5

11.测量二叉树深度5

六.心得体会6

七.附录(代码)6

二叉树的遍历

一.引言

1.1编写目的

1、熟练掌握二叉树的存储结构。

2、熟练掌握二叉树基本操作的实现。

1.2参考资料

《数据结构(C语言版)》;

二.项目介绍

2.1项目简介

二叉树()是另一种树型结构,它的特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。

开发工具

6.0

2.2软件运行环境

※处理器无要求,32以上内存,硬盘1以上

※(R)(R)系列所有操作系统

三.需求分析

3.1总体需求分析

1.二叉树的创建

2.二叉树的销毁

3.先序遍历二叉树

4.中序遍历二叉树

5.后序遍历二叉树

6.层序遍历二叉树

7.统计二叉树中叶子结点的数目

8.测量二叉树的深度

3.2主界面需求分析

设计菜单界面显示所有操作。

 

四.总体模块设计

 

1.操作菜单:

输出选择界面菜单

2.选择菜单:

输入数字选择对应操作功能

3.二叉树的创建:

按先序次序建立一个新的二叉树

4.二叉树的销毁:

将二叉树销毁

5.先序遍历二叉树:

先序遍历T,对每个结点函数调用一次且一次。

一旦()失败,则操作失败。

6.中序遍历二叉树:

中序遍历T,对每个结点函数调用一次且一次。

一旦()失败,则操作失败。

7.后序遍历二叉树:

后序遍历T,对每个结点函数调用一次且一次。

一旦()失败,则操作失败。

8.层序遍历二叉树:

层序遍历T,对每个结点函数调用一次且一次。

一旦()失败,则操作失败。

9.叶子结点的数目:

统计二叉树中叶子结点的数目

10.测量二叉树深度:

测量二叉树的深度

 

五.详细设计

1.主函数

功能说明

主函数

原型

()

输入

按键输入

输出

返回值

2.菜单函数

功能说明

主函数

原型

()

输入

按键输入

输出

返回值

3.二叉树操作菜单

功能说明

二叉树操作菜单

原型

()

输入

输入0-8数字

输出

返回值

4.创建二叉树函数

功能说明

先序创建二叉树

原型

()

输入

输出

返回值

二叉树的根地址

5.销毁二叉树函数

功能说明

销毁二叉树

原型

()

输入

输出

返回值

二叉树的根地址

6.先序遍历二叉树

功能说明

先序遍历二叉树

原型

(T,(*)(e))

输入

输出

返回值

若遍历成功,则返回,否则返回

7.中序遍历二叉树

功能说明

中序遍历二叉树

原型

(T,(*)(e))

输入

输出

返回值

若遍历成功,则返回,否则返回

 

8.后序遍历二叉树

功能说明

后序遍历二叉树

原型

(T,(*)(e))

输入

输出

返回值

若遍历成功,则返回,否则返回

 

9.层序遍历二叉树

功能说明

层序遍历二叉树

原型

(T,(*)(e))

输入

输出

返回值

若遍历成功,则返回,否则返回

 

10.叶子结点的数目

功能说明

叶子结点的数目

原型

(T)

输入

输出

叶子结点的数目

返回值

二叉树首地址

 

11.测量二叉树深度

功能说明

测量二叉树深度

原型

(T)

输入

输出

测量二叉树深度

返回值

二叉树出栈元素地址

六.心得体会

张峻峰:

本次二叉树的遍历学习让我了解二叉树存储方式。

在建立二叉树时我是采用二叉链表存储结构进行存储的。

输入时按先序次序输入二叉树中结点的值,这就要求我们要熟练的掌握二叉树的先序遍历。

在写功能函数时,主要采用递归方法,使程序的结构更加简单。

在写层序遍历二叉树时,要使用队列进行操作。

这就要求我们熟练的掌握队列的操作。

在写这一功能函数时,我遇到了一个困难。

每当我执行层序遍历二叉树功能时,总是将二叉树中的数值删除了,后来我将形参中的指针传递换成了变量传递,最终解决了这一问题。

本次的实验让我更加的了解二叉树的遍历,对二叉树的存储有了更深的理解。

瞿子晶:

这次的实验写了五个函数,创建,销毁,先序,中序,和测量树的深度,写完后没有运行,因为编译器有点问题。

后来和组长开了一个小会,就把我写的代码修改修改,然后合成,还是有用的,感觉很开心吧。

虽然比较难都是组长写的,但是吧他也有令我理解他的代码,所以总体而已,较之前进步了。

我会继续加油的!

 

七.附录(代码)

<>

<>

<>

<>

1

0

1

0

-1

-2

 

100

10

 

/***********二叉树的二叉链表存储方式***********/

{

;

*,*;左右孩子指针

},*;

 

/**********队列结构体定义***********/

{

;

*;

},*;

{

;

;

};

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

 

();

();

();

();

(e);

(T,(*)(e));

(T,(*)(e));

(T,(*)(e));

(T,(*)(e));

(T);

(T);

(T);

(T);

(*Q);创建队列

(*Q);销毁队列

(*Q);判断队列空

(*Q,e);入队

(*Q,e);出队

 

()

{

T;

T=;

(1)

{

();

(T);

}

}

()

{

("02");

("");

("\n");

("\t※※※※※※※※※※※※※※※※※※※※※※※※※※※※\n");

("\t※※\n");

("\t※****************二**叉**树**的**操**作**************※\n");

("\t※※\n");

("\t※1:

先序创建二叉树2:

销毁二叉树※\n");

("\t※※\n");

("\t※3:

先序遍历二叉树4:

中序遍历二叉树※\n");

("\t※※\n");

("\t※5:

后序遍历二叉树6:

层序遍历二叉树※\n");

("\t※※\n");

("\t※7:

叶子结点的数目8:

测量二叉树深度※\n");

("\t※※\n");

("\t※0:

退出※\n");

("\t※※\n");

("\t※※※※※※※※※※※BUG※※※※※※※※※※※※※\n");

("\n\n\t\t请选择操作:

");

}

()

{

=0;

(1)输入检测

{

("",);

();

(a>=0a<=8)

;

("\t\t非法数据,请重新输入:

");

}

(a)

{

1:

("请按先序顺序输入二叉树:

\n");

(T);

("\n输入成功!

\n请按任意键返回菜单...");

();

("");

;

 

2:

i=(T);

T=;

(i)

("\n销毁成功!

\n\n按任意键返回菜单...");

("二叉树不存在!

");

();

("");

;

3:

(T)

("二叉树不存在!

");

{

("先序遍历二叉树为:

\n\t\t");

(T);

}

(T,);

("\n\n按任意键返回菜单...");

();

("");

;

4:

(T)

("二叉树不存在!

");

{

("中序遍历二叉树为:

\n\t\t");

(T);

}

(T,);

("\n\n按任意键返回菜单...");

();

("");

;

5:

(T)

("二叉树不存在!

");

{

("后序遍历二叉树为:

\n\t\t");

(T,);

}

("\n\n按任意键返回菜单...");

();

("");

;

6:

(T)

("二叉树不存在!

");

{

("层序遍历二叉树为:

\n\t\t");

(*T,);

}

("\n\n按任意键返回菜单...");

();

("");

;

7:

i=(T);

(i0)

("二叉树不存在!

");

("二叉树中叶子结点的数目为:

\n");

("\n\n按任意键返回菜单...");

();

("");

;

8:

i=(T);

(i0)

("二叉树不存在!

");

("二叉树的深度为:

\n");

("\n\n按任意键返回菜单...");

();

("");

;

0:

(0);退出系统

}

}

/***********先序次序创建二叉树***********/

()

{

按先序次序输入二叉树中节点的值(一个字符),空格字符表示空树

构造二叉链表表示的二叉树T。

;

("",);

('')

T=;

{

(!

(T=(*)(())))

();

>=;生成根节点

(>);构造左子树

(>);构造右子树

}

;

}

 

/*************销毁二叉树*************/

()

{

(T)

{

;

}

(>);

(>);

(T);

;

}

/*

()销毁二叉树

{

(T>)

(>);利用递归

(T>)

(>);

(T);

;

}

*/

(e)

{

("",e);

;

}

 

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

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

当前位置:首页 > 法律文书 > 调解书

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

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