数据结构课程设计报告二叉树的应用操作_课程设计报告二叉树
数据结构课程设计报告二叉树的应用操作由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“课程设计报告二叉树”。
数据结构课程设计报告
题目名称: 二叉树的应用问题 专业班级: 计算机科学与技术
学生姓名:
学生学号:
指导教师:
目录
一、题目要求..............................................二、需求分析..............................................三、概要设计..............................................四、详细设计..............................................五、调试分析.............................................六、心得体会.............................................一、题目要求
实现二叉树,求解若干二叉树应用问题
实现二叉链表表示的二叉树,包括下列运算:
建立一棵二叉树;
按先序、中序和后序遍历二叉树; 按层次遍历;
求一棵二叉树的高度;
交换一棵二叉树的左右子树;
设计一个菜单驱动程序,测试上述算法
二、需求分析
建立一棵二叉树:
int CreateBiTree(BiTree &T)按先序遍历二叉树:
void PreOrder(BiTree &T)按中序遍历二叉树:
void InOrder(BiTree &T)按后序遍历二叉树:
void PostOrder(BiTree &T)按层次遍历:
void LevelOrder(BiTree &T)求一棵二叉树的高度:
int Depth(BiTree &T)交换一棵二叉树的左右子树:int PreOrderTraverse(BiTree T)菜单驱动程序:
void menu()
三、概要设计
定义二叉树的存储结构,每个结点中设置三个域,即值域、左指针域、右指针域。要建立二叉树T的链式存储结构,即建立二叉链表。根据输入二叉树结点的形式不同,建立的方法也不同,本系统采用先序序列递归建立二叉树。
先序遍历二叉树的操作定义为:若二叉树为空,则空操作;否则:(1)访问根结点;(2)先序遍历左子树;(3)先序遍历右子树。
中序遍历二叉树的操作定义为:若二叉树为空,则空操作;否则:(1)中序遍历左子树;(2)访问根结点;
(3)中序遍历右子树。
后序遍历二叉树的操作定义为:若二叉树为空,则空操作;否则:(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根结点。
层次遍历二叉树的操作选用队列的存储结构。先建立一个长度为1的队列,利用while循环,将根结点放入队首,再将队列长度加一。然后依次遍历左子树和右子树,每遍历一次,2、先序遍历二叉树:
void PreOrder(BiTree &T){ if(!T)
return;coutdataleft_child);PreOrder(T->right_child);}
3、中序遍历二叉树:
void InOrder(BiTree &T){ if(!T)return;InOrder(T->left_child);coutdataright_child);}
4、后序遍历二叉树:
void PostOrder(BiTree &T){ if(!T)return;PostOrder(T->left_child);PostOrder(T->right_child);coutdata
5、按层次遍历:
void LevelOrder(BiTree &T){ BiTree queue[100];int front,rear;if(T==NULL)return;front=-1;rear=0;queue[rear]=T;while(front!=rear){ front++;coutdataleft_child!=NULL){ rear++;queue[rear]=queue[front]->left_child;
cin>>a;if(a>=0||a
{
cout
Output(T);
cout
}
system(“pause”);
break;case 1:
cout
system(“pause”);
break;case 2:
{
cout
PreOrder(T);
cout
}
system(“pause”);
break;case 3:
{
cout
InOrder(T);
cout
}
system(“pause”);
break;case 4:
{
cout
PostOrder(T);
cout
}
system(“pause”);
break;case 5:
{
cout
LevelOrder(T);
cout
(二)详细程序代码:{ if(!T){
cout
return;} coutdataleft_child)Output(T->left_child);if(T->right_child)Output(T->right_child);}
int Depth(BiTree &T){ int i,j;if(!T)return 0;i=Depth(T->left_child);j=Depth(T->right_child);return(i>j?i:j)+1;}
void PreOrder(BiTree &T){ if(!T)
return;coutdataleft_child);PreOrder(T->right_child);}
void InOrder(BiTree &T){ if(!T)return;InOrder(T->left_child);coutdataright_child);}
void PostOrder(BiTree &T){ if(!T)return;PostOrder(T->left_child);PostOrder(T->right_child);coutdata
void LevelOrder(BiTree &T)
cout
1.二叉树树深
>>“
cout
2.二叉树的先序遍历
>>”
cout
3.二叉树的中序遍历
>>“
cout
4.二叉树的后序遍历
>>”
cout
5.二叉树的层次遍历
>>“
cout
6.左右孩子交换
>>”
cout
7.退出
>>“
cout
void main(){
int br,a;BiTree T;br=CreateBiTree(T);
while(1){
menu();
cout”;
cin>>a;
if(a>=0||a
{
switch(a)
{
case 0:
{
cout
Output(T);
cout
}
system(“pause”);
break;
case 1:
cout
system(“pause”);
break;
case 2:
{
cout
PreOrder(T);
cout
}
system(“pause”);
break;
case 3:
{
cout
(一)先序输入二叉树:
(二)建立一棵二叉树:
1后序遍历:
(四)按层次遍历:
3中序遍历交换后的二叉树:
六、心得体会
这次数据结构课程设计我选择的题目是二叉树的应用操作,题目要求中最难的部分是二叉树的层次遍历。在实现这个要求的时候我想了很久,最后通过在CSDN上找到了解决思路,就是用队列的方式。虽然是二叉树的题目,但是和其他知识点都有很多内在的联系。经过这次的实验,我不仅在二叉树的应用操作层面上更加熟悉,对二叉树的理解更加深刻,更重要的是我认识到知识要融会贯通才是它的价值所在。我的C语言基础不是很扎实,所以在写代码的时候也遇到很大的困难。像很基础的“j?i:j”也是通过翻阅以前的书籍才找到答案。还有在编程过程中的习惯也不是很好,函数及变量的命名等细节问题,如果不加以注意的话,会对后面的编译调试造成很多不必要的麻烦。我应该在以后的学习中加强实践,这样才能更扎实地掌握所学知识点,更有效地将书本上的知识变成解决实际问题的经验。