数据结构实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告书
课程名称:《数据结构》
实验题目:实验四
树
一、实验目的
(1)熟练掌握二叉树的二叉链表表示及前序创建算法与实现;
(2)熟练掌握二叉树的前序、中序和后序递归遍历算法与实现;
(3)掌握中序遍历线索二叉树的基本算法与实现
(4)掌握中序遍历线索化二叉树的算法与实现;
(5)按照实验题目要求独立完成实验内容;
(6)认真书写实验报告,并按时提交
二、实验内容
(1)按照先序序列建立下图所示二叉树的二插链表树,结点元素类型取字符型,树的字符序列从键盘逐个动态交互输入。
(2)在第(1)步建立好的二叉链表树上实施前序、中序和后序递归遍历,并输出相应遍历序列。(3)在第(1)步建立好的二叉链表树上实施前序遍历的叶子结点输出及其个数统计。
(4)在第1) 步建立好的二叉链表树上实施二叉树性质三的验证;
(5)在第1)步建立好的二叉链表树上实施中序非递归遍历,并输出相应遍历序列。
A
B
C D
E F
G
三、实验步骤
#include
#include
typedef struct Node//声明二叉树的二叉链表结点的结构
{
char data;
struct Node*LChild;
struct Node*RChild;
}BiTNode,*BiTree;
void title();
void CheckTree(int tag1);
void CreateBiTree(BiTree*bt);
void Visit(char ch);
void PreOrder(BiTree root);
void InOrder(BiTree root);
void PostOrder(BiTree root);
void YePreOrder(BiTree root);
void Leaf(BiTree root);
int CountDouble(BiTree T);
int tag=0;
int n;
int LeafCount=0;
int main()
{
int flag=1;
BiTree b;
while(flag!=0)
{
title();
printf("get the action number:\n");
scanf("%d",&flag);
getchar;
switch(flag)
{
case 1:
printf("get the Tree:\n");
CreateBiTree(&b);
tag++;
printf("new tree has been created\n");break;
case 2:
printf("先序遍历二叉树\n");
CheckTree(tag);
PreOrder(b);
printf("\n");break;
case 3:
printf("中序遍历二叉树\n");
CheckTree(tag);
InOrder(b);
printf("\n");break;
case 4:
printf("后序遍历二叉树\n");
CheckTree(tag);
PostOrder(b);
printf("\n");break;
case 5:
printf("输出叶子节点:\n");
YePreOrder(b);
putchar('\n');
Leaf(b);
printf("叶子节点数:%d\n",LeafCount);break;
case 6:
n=CountDouble(b);
printf("有两个节点数的:%d\n",n);
printf("叶子节点数:%d\n",LeafCount);
printf("二叉树性质:%d=%d+1\n",LeafCount,n);break;
case 0:return 0;
default:printf("ERROR!!!\n");
}
}
return 0;
}
void title()
{
printf("=====BiTree Action=====\n");
printf("1 先序建立特定二叉树\n");
printf("2 先序遍历二叉树\n");
printf("3 中序遍历二叉树\n");
printf("4 后序遍历二叉树\n");
printf("5 先序遍历叶子并计算数量\n");
printf("6 二叉树性质三的验证\n");
printf("0 结束程序\n");
}
void CreateBiTree(BiTree*bt)//利用“扩展先序遍历序列”创建二叉链表{
char ch;
ch=getchar();
if(ch=='.')//"."表示空结点
{
*bt=NULL;
}
else
{
*bt=(BiTree)malloc(sizeof(BiTNode));//生成一个新结点
(*bt)->data=ch;
CreateBiTree(&(*bt)->LChild);//生成左子树
CreateBiTree(&(*bt)->RChild);//生成右子树
}
}
void CheckTree(int tag1)
{
if(tag1==0)
{
printf("Tree hasn't been created ERROR!!!\n");
}
}
void Visit(char ch)
{
printf("%c",ch);