当前位置:文档之家› 二叉树的遍历和应用

二叉树的遍历和应用

内蒙古科技大学本科生课程设计说明书题目:数据结构课程设计——二叉树的遍历和应用学生姓名:学号:专业:班级:指导教师:2013年5月29日内蒙古科技大学课程设计说明书内蒙古科技大学课程设计任务书I内蒙古科技大学课程设计说明书目录内蒙古科技大学课程设计任务书..............................................................错误!未定义书签。

目录 (II)第一章需求分析 (3)1.1课程设计目的 (3)1.2任务概述 (3)1.3课程设计内容 (3)第二章概要设计 (5)2.1设计思想 (5)2.2二叉树的遍历 (5)2.3运行界面设计 (6)第三章详细设计 (7)3.1二叉树的生成 (7)3.2二叉树的先序遍历 (7)3.3 二叉树的中序遍历 (8)3.4二叉树的后续遍历 (8)3.5主程序的设计 (8)第四章测试分析 (11)4.1二叉树的建立 (11)4.2二叉树的先序、中序、后序遍历 (11)第五章课程设计总结 (12)附录:程序代码 (13)致谢 ···········································································································错误!未定义书签。

II内蒙古科技大学课程设计说明书第一章需求分析1.1课程设计目的培养学生用学到的书本知识解决实际问题的能力;培养实际工作所需要的动手能力;培养学生以科学理论和工程上能力的技术,规范地开发大型、复杂、高质量的应用软件和系统软件具有关键性作用;通过课程设计的实践,学生可以在程序设计方法、上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

1.2任务概述学生必须仔细阅读《数据结构》课程设计方案,认真主动完成课程设计的要求。

有问题及时主动通过各种方式与教师联系沟通。

学生要发挥自主学习能力,充分利用时间,安排好课程设计的时间计划,并在课程设计过程中不断检测自己的计划完成情况,及时向教师汇报。

课程设计按照教学计划需要一周时间完成,一周中每天至少要上两小时的上机来调试C或C++语言设计的程序,总共至少要上机调试程序10小时。

属教师安排上机时间学生不得缺席。

1.3课程设计内容二叉树的遍历和应用以二叉链表表示二叉树,在此基础上实现对二叉树的遍历和应用。

要求设计类(或类模板)来描述二叉树,包含必要的构造函3内蒙古科技大学课程设计说明书数和析构函数,以及其他能够完成如下功能的成员函数: 创建二叉树输出二叉树二叉树的先序、中序、后序遍历二叉树的按层遍历统计二叉树的叶子结点、计算二叉树的深度并设计主函数测试该类(或类模板)。

4内蒙古科技大学课程设计说明书第二章概要设计2.1设计思想以广义表格式输入一个二叉树,将其接收至一维数组中,利用栈结构建立二叉链表树;通过先、中、后访问根结点递归算法遍历二叉树。

例如:a(c(,d),f(g,))建立如下图所示二叉树。

2.2二叉树的遍历5内蒙古科技大学课程设计说明书2.3运行界面设计6内蒙古科技大学课程设计说明书第三章详细设计3.1二叉树的生成struct btnode *bt; int k;{int b; struct btnode *p,*t;printf("请输入b: ");scanf("%d",&b);if(b!=0){p=(struct btnode *)malloc(sizeof(struct btnode));p->d=b;p->lchild=NULL;p->rchild=NULL;if(k==0) t=p;if(k==1) bt->lchild=p;if(k==2) bt->rchild=p;creatbt(p,1); creatbt(p,2);}return(t);}3.2二叉树的先序遍历pretrav(bt) /***二叉树的先序遍历***/struct btnode *bt;{if(bt!=NULL){printf("%d ",bt->d);pretrav(bt->lchild);pretrav(bt->rchild);}7内蒙古科技大学课程设计说明书return;}3.3 二叉树的中序遍历intrav(bt) /***二叉树的中序遍历**/struct btnode *bt;{if(bt!=NULL){intrav(bt->lchild);printf("%d ",bt->d);intrav(bt->rchild);}return;}3.4二叉树的后续遍历postrav(bt ) /***二叉树的后序遍历****/struct btnode *bt;{if(bt!=NULL){postrav(bt->lchild);postrav(bt->rchild);printf("%d ",bt->d);}return;}3.5主程序的设计main(){8内蒙古科技大学课程设计说明书struct btnode *bt;int k; char i;bt=(struct btnode *)malloc (sizeof(struct btnode));k=0;printf("输入字符'0',退出程序\n");printf("输入字符'1',生成二叉树\n");printf("输入字符'2',二叉树的先序遍历\n");printf("输入字符'3',二叉树的中序遍历\n");printf("输入字符'4',二叉树的后序遍历\n");printf("请输入字符'0'-'4': ");scanf("%s",&i);for(;i!='0';){switch(i){case '1':{bt=creatbt(bt,k);break;}case '2':{pretrav(bt);printf("\n");break;}case '3':{intrav(bt);printf("\n");break;}case '4':{postrav(bt);printf("\n");break;}default:break;}printf("输入字符'0',退出程序\n");printf("输入字符'1',生成二叉树\n");printf("输入字符'2',二叉树的先序遍历\n");printf("输入字符'3',二叉树的中序遍历\n");9printf("输入字符'4',二叉树的后序遍历\n");printf("请输入字符'0'-'4': ");scanf("%s",&i);}free(bt);}第四章测试分析4.1二叉树的建立4.2二叉树的先序、中序、后序遍历先序中序后序第五章课程设计总结二叉树是数据结构的的基本内容。

虽然程序规模不大,我依然付出了努力,仍免不了各种错误的出现。

编程过程需要很大的毅力和耐心,而且要有良好的思维和扎实的专业基础知识,所以我需要不断的学习,发现自身不足之处并改正它,逐步提高自己。

培养学生用学到的书本知识解决实际问题的能力;培养实际工作所需要的动手能力;培养学生以科学理论和工程上能力的技术,规范地开发大型、复杂、高质量的应用软件和系统软件具有关键性作用;通过课程设计的实践,学生可以在程序设计方法、上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

通过这次数据结构的课程设计,让我熟悉了二叉树的结构以及其相关的操作程序。

尤其二叉树遍历的实现过程。

从中我对数据结构这门课程的理解也更深层次。

附录:程序代码#include <stdio.h>#include <stdlib.h>struct btnode{int d;struct btnode *lchild;struct btnode *rchild;};struct btnode *creatbt(bt,k)/*二叉树的生成*/struct btnode *bt; int k;{int b; struct btnode *p,*t;printf("请输入b: ");scanf("%d",&b);if(b!=0){p=(struct btnode *)malloc(sizeof(struct btnode));p->d=b;p->lchild=NULL;p->rchild=NULL;if(k==0) t=p;if(k==1) bt->lchild=p;if(k==2) bt->rchild=p;creatbt(p,1); creatbt(p,2);}return(t);}pretrav(bt) /***二叉树的先序遍历***/struct btnode *bt;if(bt!=NULL){printf("%d ",bt->d);pretrav(bt->lchild);pretrav(bt->rchild);}return;}intrav(bt) /***二叉树的中序遍历**/ struct btnode *bt;{if(bt!=NULL){intrav(bt->lchild);printf("%d ",bt->d);intrav(bt->rchild);}return;}postrav(bt ) /***二叉树的后序遍历****/ struct btnode *bt;{if(bt!=NULL){postrav(bt->lchild);postrav(bt->rchild);printf("%d ",bt->d);}return;main(){struct btnode *bt;int k; char i;bt=(struct btnode *)malloc (sizeof(struct btnode));k=0;printf("输入字符'0',退出程序\n");printf("输入字符'1',生成二叉树\n");printf("输入字符'2',二叉树的先序遍历\n");printf("输入字符'3',二叉树的中序遍历\n");printf("输入字符'4',二叉树的后序遍历\n");printf("请输入字符'0'-'4': ");scanf("%s",&i);for(;i!='0';){switch(i){case '1':{bt=creatbt(bt,k);break;}case '2':{pretrav(bt);printf("\n");break;}case '3':{intrav(bt);printf("\n");break;}case '4':{postrav(bt);printf("\n");break;}default:break;}printf("输入字符'0',退出程序\n");printf("输入字符'1',生成二叉树\n");printf("输入字符'2',二叉树的先序遍历\n");printf("输入字符'3',二叉树的中序遍历\n");printf("输入字符'4',二叉树的后序遍历\n");printf("请输入字符'0'-'4': ");scanf("%s",&i);}free(bt);}。

相关主题