实验四 树和二叉树及其应用(I)

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

姓名学号

序#include"DataStructure_BinaryTree.h"//数据结构第六章树与二叉树函数的定义及声明using namespace std;

int main(void)

{

system("title 数据结构实验实验四:树和二叉树及其应用(I) "); //设置cmd窗口标题 system("color F1"); //设置控制台窗口的背景色和前景色

system("date /T"); //输出当前的日期

print();

cout << "实验内容一:树的遍历" << endl;

BiTree T;

int num = 0;

cout << " 二叉树的建立:" << endl;

cout << " 输入二叉树数据:";

GreateBiTree(T); //先序建立二叉树

cout << " 二叉树的遍历" << endl << " 【递归遍历】 ";

cout << endl << "> 先序遍历:";

PreOrderTraverse(T, PrintElement); //先序遍历二叉树

cout << endl << "> 中序遍历:";

InOrderTraverse(T, PrintElement); //中序遍历二叉树

cout << endl << "> 后序遍历:";

PostOrderTraverse(T, PrintElement); //后序遍历二叉树

cout << endl << "> 层序遍历:" << endl;

LevelOrderTraverse(T, PrintElement); //层序遍历二叉树

cout << endl<< " 【非递归遍历】";

cout << endl << "> 先序遍历:";

PreOrderTraverseNonRec(T, PrintElement); //先序遍历二叉树

cout << endl << "> 中序遍历:";

InOrderTraverseNonRec(T, PrintElement); //中序遍历二叉树

cout << endl << "> 后序遍历:";

PostOrderTraverseNonRec(T, PrintElement); //后序遍历二叉树

cout << endl << "> 层序遍历:";

LevelOrderTraverseNonRec(T, PrintElement);//层序遍历二叉树

print();

cout << endl << "实验内容二:二叉树的基本操作";

cout << endl << "<1> 二叉树的深度:" << BiTDepth(T) << endl;

LeafTNodeNum(T, num);

cout << "<2> 二叉树中叶子结点的数目:" << num << endl;

cout << "<3> 交换左右子树:" << endl;

ExchangeBiTree(T);

cout << " 交换后的二叉树:" << endl;

LevelOrderTraverse(T, PrintElement); //层序遍历二叉树

BiTree root;

TElemType x;

int depth;

cout << "<4> 查找指定节点的根子树:" << endl << " 请输入需要查找的根节点:x = ";

cin >> x;

PreOrderLocate(T, x, root); //先序查找以元素值为x的结点为子树,并以root指向其根子树cout << " 以元素x为根节点的根子树:" << endl;

LevelOrderTraverse(root, PrintElement); //层序遍历二叉树

ChildBiTreeDepth(T, x, depth);

cout << "<5> 查找指定节点的根子树的深度:" << endl << " 以元素x为根节点的根子树的深度:" << depth << endl;

cout << "<6> 判断根子树是否为完全二叉树:" << endl;

if (CompleteBiTree(root))

cout << " 以元素x为根节点的根子树是完全二叉树" << endl;

else

cout << " 以元素x为根节点的根子树不是完全二叉树" << endl;

DelChildBiTree(T, x);

cout << "<7> 删除二叉树:" << endl;

cout << " 删除以元素x为根节点的根子树后的二叉树:" << endl;

LevelOrderTraverse(T, PrintElement); //层序遍历二叉树

if (CompleteBiTree(T))

cout << " 删除以元素x为根子树后的二叉树是完全二叉树" << endl;

else

cout << " 删除以元素x为根子树后的二叉树不是完全二叉树" << endl;

DestoryBiTree(T); //销毁二叉链表T

DestoryBiTree(root); //销毁二叉树root

return 0;

}

2.头文件”ADT.h”的部分程序如下:

#ifndef ADT_H_

#define ADT_H_

/* ------二叉树数据类型定义------ */

typedef char TElemType; //顺序表中元素的数据类型

/* ------二叉树链式结构类型定义------ */

typedef struct BiTNode

{

TElemType data; //二叉树结点数据

struct BiTNode *lchild, *rchild; //二叉树结点指针

}BiTNode, *BiTree; //二叉树结点类型及结构体指针类型

/************************栈和队列*************************/

/* ------栈数据类型定义------ */

typedef BiTree SElemType; //顺序表中元素的数据类型

/* ------队列数据类型定义------ */

typedef BiTree QElemType; //顺序表中元素的数据类型

相关文档
最新文档