数据结构课程设计二叉树的建立
《数据结构》课程设计
题 目
学生姓名
指导教师
学 院
专业班级 信息与计算科学一班
完成时间 2014年01月05日
目录
第一章 课程设计目的3
第二章 课程设计内容和要求3
2.1后序序列以及中序序列的输入3
2.2 二叉树的建立3
2.3 运行环境3
第三章 课程设计分析3
3.1二叉树的构造3
第四章 算法(数据结构)描述4
第五章 源代码5
第六章 运行结果分析8
第七章 结束语10
第八章 参考文献10
第一章 课程设计目的
巩固和加深《数据结构》课程的基本知识,更好的将理论知识与实际相结合;
熟悉并掌握C++语言知识;
掌握二叉树的遍历方法以及编程;
提高编程能力与专业水平;
课程设计内容和要求
2.1后序序列以及中序序列的输入
根据任意一棵二叉树,分别输入其后序遍历(LRV)以及中序遍历(LVR)。
两个遍历都遵循先左后右的法则,后序遍历第三次遇到结点时才访问,中序遍历第二次遇到结点就进行访问。
2.2 二叉树的建立
根据后序遍历的定义,后序序列的最后一个一定是根。又根据中序序列,根将中序序列分为左子树和右子树,递归的对左子树以及右子树进行判断划分就能求出整棵树的结构,则建立起了一棵二叉树。
前序遍历中第一次遇到节点就进行访问。
2.3 运行环境
该程序的运行环境为Windows 7系统,Microsoft Visual C++10.0版本。
课程设计分析
3.1二叉树的构造
为方便进行理解,我以一棵二叉树为例,其他二叉树的构造过程类似。
对于以下二叉树,我进行了前序遍历、中序遍历、后序遍历如下:
前序遍历:ABDGEHCFIJ
中序遍历:GDBHEACIFJ
后序遍历:GDHEBIJFCA
二叉树(图1)
根据上述给出的遍历,我们将中序以及后序遍历的结果输入,然后头文件中的createBinaryTree函数对中序以及后序进行处理
后序遍历的最后一个字母是A,则A一定是根,又根据中序遍历的定义,从A字母把中序划分为两个子列:(GDBHE)A(CIFJ),这样就可以得到对二叉树的第一次近似,然后取后序序列的倒数第二个字母C,它出现在右子树中,应该是右子树的根,它把中序(CIFJ)又划分为两个子序列:()C(IFJ),这样可以得到对二叉树的第二次近似,将这个过程继续下去就能递归的构造出二叉树。
算法(数据结构)描述
这是一个递归的过程,先在后序序列中找到相应的根,然后根据根将中序遍历分为左子树和右子树。再分别对左子树以及右子树执行与上述过程一致的判断以及划分,最后将整颗树构造出来
//(1-1)createBinaryTree利用后序序列和中序序列构造二叉树
template
ThreadNode* ThreadTree::createBinaryTree(T *LRV,T *LVR,int n){
if(n==0)return NULL;
int k=0;
while(LRV[n-1]!=LVR[k])k++;
//在中序序列中寻找根
ThreadNode*t=new ThreadNode(LRV[n-1]);
//创建根结点
t->leftChild=createBinaryTree(LRV,LVR,k);
//从后序的LRV开始,对中序的0到k-1左子序列的k个元素地鬼建立左子树
t->rightChild=createBinaryTree(LRV+k,LVR+k+1,n-k-1);
//从后序的LRV+k开始,对中序的k+1到n-1右子序列的n-k-1个元素建立右子树
return t;
};
执行文件如下:
首先进行后序序列以及中序序列的输入,然后构建出二叉树,接着输出前序序列进行验证,看是否程序准确运行。
void