实验报告

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

实验报告

实验题目:二叉树

实验目的:

1、熟悉二叉树的结点类型和二叉树的基本操作。

2、掌握二叉树的前序、中序和后序遍历的算法。

3、加深对二叉树的理解,逐步培养解决实际问题的编程能力。

基本要求:

1.编写程序bitree.cpp实现ADTBiTree,要求使用二叉链表存储。实现基本操作:InitBiTree(&T);

DestroyBiTree(&T);

PreOrder(T,visit());

InOrder(T,visit());

PostOrder(T,visit());

2.编码实现以下算法:

1)创建二叉树。(以先序扩展序列给出)

2)输出先序、中序和后序序列。

3)计算二叉树结点数、叶子结点数、高度。

测试数据:先序扩展序列:ABDF##G##E#H##C##输出:先序ABDFGEHC中序FDGBEHAC后序FGDHEBCA结点数:8叶子结点数:4高度:4。

实验拓展

1)实现层次遍历。

2)查找:查值为X的结点、双亲结点、孩子结点、兄弟结点

3)判断:判断一个二叉树是否为二叉排序树、完全二叉树、平衡和二叉树

4)处理:左右子树互换、复制、删除子树、插入子树

设计思路:

1.在二叉树的存储结构为链式存储结构。

2.在具体实现的时候建立不同函数,在主程序中用循环菜单的形式调用函数提高了效率。

概要分析:

二叉链表结构定义:

typedef struct BiNode{

ElemType data;

struct BiNode *lchild,*rchild;

}BiNode,*BiTree;

CreatBiTree(BiTree &T);先序建立二叉树。

DestroyBiTree(BiTree &T);销毁二叉树;

PreOrder(BiTree &T);先序遍历二叉树

InOrder(BiTree &T);中序遍历二叉树

PostOrder (BiTree &T);后序遍历二叉树

PrintbyLev(BiTree &T);按层次遍历二叉树,利用队列的思想,从根结点开始将其放入一

个数组中,用i记录子节点尚未放入数组的位置,再将i所指向节点的左右节点放入队列中,然后i+1,对下一个节点这样操作,直至最后一个节点是叶子节点。

IsLeaf(BiTree &T);判断是否为叶子节点(是否有左右子树)。

FullBiTree(BiTree &T);判断是否为完全二叉树,采用广度优先遍历,从根节点开始,入队列,如果队列不为空,循环。遇到第一个没有左儿子或者右儿子的节点,设置标志位,如果之后再遇到有左/右儿子的节点,那么这不是一颗完全二叉树。

CountBiTree(BiTree &T);节点计数,用递归思想,对左右子树计数,再加起来。LevelNum(BiTree& T,int t,int d);计算层数,利用递归思想,对左右子树计算层数并取较大值。

LeafNum(BiTree& T,int t,int d,int ln);叶子节点计数,利用递归思想,计算左右子树叶子再计算和。

Balance(BiTree &T,int i);判断是否为平衡二叉树,递归判断左右是否为平衡二叉树(有层数记录)。

Sort(BiTree &T,int i);判断是否为二叉排序树,判断此节点是否满足排序树定义,在判断其左右子树是否满足。

PrintChild(BiTree &T);打印左右子树。

FindNode(ElemType x,BiTree &T);查找算法,如果是根节点提示是根节点并返回指向根节点的指针,若果不是则调用Findx函数。

FindX(ElemType x,BiTree &temp,BiTree &T);查找算法,返回指向对应子树的根节点的指针。

CopyBiT(BiTree &T,BiTree &C);复制子树。

运行截图:

主界面

建立二叉树

输出三序遍历及二叉树信息

按层输出

查找二叉树

分析二叉树

左右子树互换:对A 然后按层次输出

删除以B为根节点的子树:

(层次遍历)

复制节点C

增加节点B于A的左节点

(层次遍历)

结果与讨论:

程序完成情况较好,由于实验内容比较多,所以写了很多函数,但有些函数之间是有调用关系,减轻了工作量。同时利用循环菜单也让程序看起来更为简洁,调用子程序也更为方便。

程序代码:

#include

#include

#include

#include

using namespace std;

typedef int Status;

typedef char ElemType; typedef struct BiNode{

ElemType data;

struct BiNode *lchild,*rchild; }BiNode,*BiTree;

#define OK 1

#define ERROR 0

//先序遍历建立二叉树

Status CreatBiTree(BiTree &T){ ElemType c;

cin >> c;

if(c=='.'){

T=NULL;

}

else{

相关文档
最新文档