数据结构实验报告一---二叉树的操作算法

时间:2025-02-27

中南大学 数据结构实验报告一---二叉树的操作算法

中南大学

信息科学与工程学院

数据结构 实验报告

实验名称: 二叉树的操作算法 班 级: 物联网1103班 学 号: 姓 名: 指导老师: 刘 安 丰 实验时间: 2013年4月22日

中南大学 数据结构实验报告一---二叉树的操作算法

数据结构实验一 物联网 1103 樊列龙 0909113224

一、实验目的 1、掌握二叉树的定义; 2、掌握二叉树的基本操作; 3、学会使用递归和非递归的方法遍历二叉树; 4、熟悉使用 C++/STL 提供的方法; 5、理解面向对象的思想的优势; 3、提高编程能力,使用一种语言描述算法算法(本次实验使 用 C++语言描述) 。

二、实验内容

实现二叉树的常用操作算法:包括二叉树的建立、遍历、求高 度、线索化等操作。

三、ADT 设计 二叉树的抽象数据类型: ADT BinaryTree { 数据对象 D:D 是具有相同特性的数据元素的集合。 数据关系 R: 若 D=Φ ,则 R= Φ ,则称 BinaryTree 为空二叉树; 若 D≠Φ ,则 R={H},H 是如下的二元关系: ( 1) 、在 D 中存在唯一的称为根的数据元素 root,

1

中南大学 数据结构实验报告一---二叉树的操作算法

数据结构实验一 物联网 1103 樊列龙 0909113224

它在关系 H 下无前驱。 ( 2) 、 若 D-{root}≠Φ , 则存在 D-{root}={D1, Dr}, 且 D1∩Dr=Φ ; (3) 、若 D ≠ Φ ,则 D1 中存在唯一的元素 X1, <root,X1>∈H,且存在 D1 上的关系 H1∈H。 } 基本操作: 1、void PreOrderTraverse 2、void InOrderTraverse 3、void PostOrderTraverse 4、void BiTreeDepth 5、void DestroyBiTree 6、bool BiTrrEmpty() const 7、BiTNode<T>* Root() 输出二叉树的前序遍历结果  输出二叉树的中序遍历结果  输出二叉树的后序遍历结果 求二叉树的深度 销毁二叉树 判断二叉树为空 找到二叉树根节点

8、void LevelOrderTraverse() 层次遍历二叉树

四、算法设计分析(一) 、非递归先序遍历二叉树前序遍历的算法借助栈来实现: (1)栈中存放已被访问的节点 (2)先要往左走到最底端,也就是此时节点的左孩子为 NULL (3)然后向右走一步(通过出栈来获得其双亲节点数据,将当前指针

2

中南大学 数据结构实验报告一---二叉树的操作算法

数据结构实验一 物联网 1103 樊列龙 0909113224

指向它的右孩子即可)

(4)以这个右孩子为新的头节点,如果它为 NULL,则继续出栈获得上 一个双亲节点,在向右一步,重复 这个过程,直到栈为空或者有一个节点的右孩子不为 NULL (5)有了新的头节点后,重复(2) (3) ,直到栈为空,也就是遍历完 毕.

(二) 、非递归中序遍历二叉树(1)构造栈,头节点入栈,栈中元素为存放着未被访问的节点 (2)向左走到最底端,退栈,访问这个节点,然后向右走一步 (3)以右节点为新的头节点,继续(2) ,直到栈为空,表示遍历结束

(三) 、非递归中序遍历二叉树(1)我们需要的不是栈了,

而是队列 (2)当访问一个节点的时候,我们要考虑其左右孩子,若有不为空的 孩子就让它入队列,在其双亲节点后面排队 (3)采取从左到右、从上到下的层次,每让最前端的出队列被访问时, 就应该让它的不为空的孩子指针入队列 (4)当队列为空的时候,就表示遍历完毕了

3

中南大学 数据结构实验报告一---二叉树的操作算法

数据结构实验一 物联网 1103 樊列龙 0909113224

五、实验结果

树是否为空?true, 树的深度 = 0 树是否为空?false, 树的深度 = 4 先序输出结果:A B D G E C F 中序遍历结果:G D B E A C F 后序遍历结果:G D E B F C A 层次遍历结果:A B C D E F G

树是否为空?true, 树的深度 = 0

4

中南大学 数据结构实验报告一---二叉树的操作算法

数据结构实验一 物联网 1103 樊列龙 0909113224

六、实验总结 在编写程序时, 遇到了一个程序保存后编译正确却运行不了之 后请教了我们班的同学才知道是第一个函数出了问题改了之后就 好了。 做程序编写时必须要细心,有时候问题出现了,可能会一直查 不出来。自己也不容易发现。在编写这个程序时。我就出现了这个 问题,之后一定要尽量避免此类问题出现。

5

中南大学 数据结构实验报告一---二叉树的操作算法

数据结构实验一 物联网 1103 樊列龙 0909113224

六、实验源程序 stdhead.h/* ========================================================================== *\ * @Copyright (c) 2013, CSU 樊列龙, All rights reserved. * * @fileName: stdhead.h * @brief: 包含一些常用的头文件 * * @version: * @author: 樊列龙 * @time: 2013-4-23/上午4:42:02 * \* ========================================================================= */ #ifndef STDHEAD_H_ #define STDHEAD_H_ #include #include #include #include #include #include #include #include <iostream> <fstream> <queue> <stack> <stdio.h> <string> <cstring> <cassert>

using namespace std; #endif /* STDHEAD_H_ */

BiTNode.h/* ========================================================================== *\

6

中南大学 数据结构实验报告一---二叉树的操作算法

数据结构实验一 物联网 1103 樊列龙 0909113224 * @Copyright (c) 2013, CSU CocoonFan All rights reserved. * @fileName: BiTNode.h * @brief: 二叉链表节点类型结构体 …… 此处隐藏:5953字,全部文档内容请下载后查看。喜欢就下载吧 ……

数据结构实验报告一---二叉树的操作算法.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219