c语言数据结构课程设计二叉树,数据结构课程设计二叉树的建立.doc

数据结构课程设计二叉树的建立

《数据结构》课程设计

题 目

学生姓名

指导教师

学 院

专业班级 信息与计算科学一班

完成时间 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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值