实验四 树和二叉树及其应用(I)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; //顺序表中元素的数据类型