《二叉树基本操作实验报告》

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构与数据库》

实验报告

实验题目

二叉树的基本操作及运算

学院:化学与材料科学学院

专业班级:09级材料科学与工程系PB0920603

姓名:李维谷

学号:PB09206285

邮箱:**************

指导教师:贾伯琪

实验时间:2010年10月17日

一、需要分析

问题描述:

实现二叉树(包括二叉排序树)的建立,并实现先序、中序、后序和按层次遍历,计算叶子结点数、树的深度、树的宽度,求树的非空子孙结点个数、度为2的结点数目、度为2的结点数目,以及二叉树常用运算。

问题分析:

二叉树树型结构是一类重要的非线性数据结构,对它的熟练掌握是学习数据结构的基本要求。由于二叉树的定义本身就是一种递归定义,所以二叉树的一些基本操作也可采用递归调用的方法。处理本问题,我觉得应该:

1、建立二叉树;

2、通过递归方法来遍历(先序、中序和后序)二叉树;

3、通过队列应用来实现对二叉树的层次遍历;

4、借用递归方法对二叉树进行一些基本操作,如:求叶子数、树的深度宽度等;

5、运用广义表对二叉树进行广义表形式的打印。

算法规定:

输入形式:为了方便操作,规定二叉树的元素类型都为字符型,允许各种字符类型的输入,没有元素的结点以空格输入表示,并且本实验是以先序顺序输入的。

输出形式:通过先序、中序和后序遍历的方法对树的各字符型元素进行遍历打印,再以广义表形式进行打印。对二叉树的一些运算结果以整型输出。

程序功能:实现对二叉树的先序、中序和后序遍历,层次遍历。计算叶子结点数、树的深度、树的宽度,求树的非空子孙结点个数、度为2的结点数目、度为2的结点数目。对二叉树的某个元素进行查找,对二叉树的某个结点进行删除。

测试数据:输入一:ABC□□DE□G□□F□□□(以□表示空格),查找5,删除E

预测结果:先序遍历ABCDEGF

中序遍历CBEGDFA

后序遍历CGEFDBA

层次遍历ABCDEFG

广义表打印A(B(C,D(E(,G),F)))

叶子数3 深度5 宽度2 非空子孙数6 度为2的数目2 度为1的数目2

查找5,成功,查找的元素为E

删除E 后,以广义表形式打印A (B (C,D (,F )))

输 入 二:ABD □□EH □□□CF □G □□□ (以□表示空格),查找10,删除B 预测结果:先序遍历 ABDEHCFG

中序遍历 DBHEAGFC 后序遍历 DHEBGFCA

层次遍历 ABCDEFHG

广义表打印 A (B(D,E(H)),C(F(,G)))

叶子数 3 深度 4 宽度 3 非空子孙数 7 度为2的数目 2 度为1的数目3 查找10,失败。

删除B 后,以广义表形式打印A (,C (F (,G )))

二、 概要设计

程序中将涉及下列两个抽象数据类型:一个是二叉树,一个是队列。

1、设定“二叉树”的抽象数据类型定义:

ADT BiTree{

数据对象D :D 是具有相同特性的数据元素的集合。

数据关系R :

若 Φ=D ,则Φ=R ,称BiTree 为空二叉树;

若 Φ≠D ,则{}H R =,H 是如下二元关系:

(1) 在D 中存在唯一的称为根的数据元素root ,它在关系H 下无前驱;

(2) 若{} ,Φ≠-root D 则存在{}{},,r l D D root D =-且Φ=⋂r l D D ;

(3) 若,Φ≠l D 则l D 中存在唯一的元素l x ,,,H x root l >∈<且存在l D 上的关系

;H H l ⊂若,Φ≠r D 则r D 中存在唯一的元素r x ,,,H x root r >∈<且存在r D 上的

关系{}

r l r l r H H x root x root H H H ,,,,,;><><=⊂;

(4) {}()l l H D ,是一棵符合本定义的二叉树,称为根的左子树,{}()r r H D ,是一棵符合本

定义的二叉树,称为根的有字树

基本操作:

CreateBiTree&T)

操作结果:按照T 的定义构造一个二叉树。

BiTreeDepth(& T)

初始条件:二叉树T 已存在。

操作结果:返回T 的深度。

BiTreeWidth(&T)

初始条件:二叉树T 已存在。

操作结果:返回T 的宽度。

PreOderTraverse&T)

初始条件:二叉树T 已存在。

操作结果:先序遍历打印T ,

InOderTraverse(&T)

初始条件:二叉树T 已存在。

操作结果:中序遍历打印T 。

PostOderTraverse(&T)

初始条件:二叉树T 已存在。

操作结果:后序遍历打印T 。

LevelTraverse(&T)

初始条件:二叉树T 已存在。

操作结果:层次遍历T 。

DeleteXTree(&T,TElemType x)

初始条件:二叉树已存在。

操作结果:删除元素为x 的结点以及其左子树和右子树。

CopyTree(&T)

初始条件:二叉树T 已存在。

操作结果:以T 为模板,复制另一个二叉树。

}ADT BiTree

2、设定队列的抽象数据类型定义:

ADT Queue{

数据对象:D={i a },+∈∈N i BiTree a i 数据关系:R1={<1,-i i a a >|1-i a ,D a i ∈,i=2,…,n}

约定1a 端为队列头,n a 端为队列尾。

基本操作:

InitQueue(&Q)

操作结果:构造一个空队列Q 。

EnQueue(&Q,&e)

初始条件:队列Q 已存在。

操作结果:插入元素e 为Q 的新的队尾元素。

DeQueue(&Q)

初始条件:队列Q 已存在。

操作结果:删除Q 的对头元素,并返回其值。

QueueEmpty(&Q)

初始条件:队列Q 已存在。

操作结果:若Q 为空队列,则返回1,否则0。

} ADT Queue

3、本程序包含四个模块

相关文档
最新文档