数据结构二叉树的基本操作 下载本文

数据结构与算法课程实验报告

实验四:二叉树的基本操作

姓名:沈靖雯

班级:14信息与计算科学(2)班 学号:2014326601094

实验四 二叉树的基本操作

【实验内容】

实现创建和遍历二叉树的基本操作

【实验目的】

掌握二叉树的定义和存储表示,学会建立一棵特定二叉树的方法;掌握二叉树的遍历算法(先序、中序、后序遍历算法)的思想,并学会遍历算法的递归实现和非递归实现。

【问题描述】

(1) 编程实现构造一棵二叉树的算法,适合任意合法输入的二叉树的建

立,并进行相应异常处理。

(2) 编程实现在二叉链表这种存储方式下,实现二叉的遍历,可采用递

归或者非递归实现,遍历算法可在先序、中序和后序遍历算法中任选其一。

【问题实现】

一、实现链队列基本运算

(1)抽象数据类型 ADT BTree {

数据对象D:?D是具有相同特性的数据元素的集合。? 基本操作: CreatBiTree(*T)

操作结果:构造二叉树T。 PreOrderTraverse(T)

初始条件:二叉树T已存在。 操作结果:先序遍历T。 InOrderTraverse(T)

初始条件:二叉树T已存在。 操作结果:中序遍历T。 PostOrderTraverse(T)

初始条件:二叉树T已存在。 操作结果:后序遍历T。 } ADT BTree

(2)主要实现思路与主要程序代码: 1).首先定义二叉树结点结构;

typedef struct Node { char data; struct Node *lchild,*rchild; //左右孩子指针 }BiTNode,*BTree;

2).其次定义一个二叉树构造函数int CreatBiTree(BTree *T);采用递归先序法构造二叉树;

scanf(\

if(ch==' ') *T=NULL;//T为空二叉树 else {

if(!(*T=(BTree)malloc(sizeof(BiTNode)))) return (OVERFLOW); (*T)->data=ch; CreatBiTree(&((*T)->lchild)); CreatBiTree(&((*T)->rchild)); }

3).定义遍历函数(递归先序为例);

//先序遍历二叉树,递归实现

void PreOrderTraverse(BTree T) { if(T) { printf(\ PreOrderTraverse (T->lchild); PreOrderTraverse (T->rchild); } }

这里用printf代替visit(),简化程序代码;

4).定义主函数,总体完成以上所有函数功能的实现(构建二叉树与遍历二叉树)。

程序运行如图1:

图 1

【总结】

实验结果实现了问题的基本要求。

对该问题的操作使我对二叉树的结构更加了解,尤其在二叉树遍历部分,对