实验五二叉树遍历.docx
《实验五二叉树遍历.docx》由会员分享,可在线阅读,更多相关《实验五二叉树遍历.docx(21页珍藏版)》请在冰豆网上搜索。
![实验五二叉树遍历.docx](https://file1.bdocx.com/fileroot1/2022-11/19/2ce067ec-c38e-4a7f-a48d-ae98b214437c/2ce067ec-c38e-4a7f-a48d-ae98b214437c1.gif)
实验五二叉树遍历
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);
;
}
/***********