数据结构二叉树实验报告

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

实验三二叉树的遍历

一、实验目的

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

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

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

二、实验环境

运行C或VC++的微机。

三、实验内容

1、依次输入元素值,以链表方式建立二叉树,并输出结点的值。

2、分别以前序、中序和后序遍历二叉树的方式输出结点内容。

四、设计思路

1. 对于这道题,我的设计思路是先做好各个分部函数,然后在主函数中进行顺序排列,以此完成实验要求

2.二叉树采用动态数组

3.二叉树运用9个函数,主要有主函数、构建空二叉树函数、建立二叉树函数、访问节点函数、销毁二叉树函数、先序函数、中序函数、后序函数、范例函数,关键在于访问节点

五、程序代码

#include

#include

#include

#define OK 1

#define ERROR 0

typedef struct TNode//结构体定义

{

int data; //数据域

struct TNode *lchild,*rchild; // 指针域包括左右孩子指针 }TNode,*Tree;

void CreateT(Tree *T)//创建二叉树按,依次输入二叉树中结点的值 {

int a;

scanf("%d",&a);

if(a==00) // 结点的值为空

*T=NULL;

else // 结点的值不为空

{

*T=(Tree)malloc(sizeof(TNode));

if(!T)

{

printf("分配空间失败!!TAT");

exit(ERROR);

}

(*T)->data=a;

CreateT(&((*T)->lchild)); // 递归调用函数,构造左子树 CreateT(&((*T)->rchild)); // 递归调用函数,构造右子树 }

}

void InitT(Tree *T)//构建空二叉树

{

T=NULL;

}

void DestroyT(Tree *T)//销毁二叉树

{

if(*T) // 二叉树非空

{

DestroyT(&((*T)->lchild)); // 递归调用函数,销毁左子树 DestroyT(&((*T)->rchild)); // 递归调用函数,销毁右子树 free(T);

T=NULL;

}

}

void visit(int e)//访问结点

{

printf("%d ",e);

}

void PreOrderT(Tree *T,void(*visit)(int))//先序遍历T

{

if(*T) // 二叉树非空

{

visit((*T)->data); // 先访问根结点

PreOrderT(&((*T)->lchild),visit); // 递归调用函数,先序遍历左子树 PreOrderT(&((*T)->rchild),visit); // 递归调用函数,先序遍历右子树 }

}

void InOrderT(Tree *T,void(*visit)(int))

{

if(*T)

{

InOrderT(&((*T)->lchild),visit); // 递归调用函数,中序遍历左子树 visit((*T)->data); // 访问根结点

InOrderT(&((*T)->rchild),visit); // 递归调用函数,中序遍历右子树 }

}

void PostOrderT(Tree *T,void(*visit)(int))

{

if(*T)

{

PostOrderT(&((*T)->lchild),visit); // 递归调用函数,后序遍历左子树 PostOrderT(&((*T)->rchild),visit); // 递归调用函数,序遍历右子树 visit((*T)->data); // 访问根结点

}

}

void example()

{

int i;

printf("如果你想建立如图所示的二叉树\n");

printf("\n");

printf(" 1 \n");

printf(" / \\ \n");

printf(" 3 3 \n");

printf(" / \\ \\ \n");

printf(" 4 5 7 \n");

printf("\n");

printf("请输入:1 3 4 00 00 5 00 00 3 00 7 00 00\n");

printf("\n按先序次序输入二叉树中结点的值(输入00表示节点为空)\n");

for(i=0;i<71;i++)

printf("*");

printf("\n");

}

int main ()

{

Tree T;

printf("**************欢迎使用!**************潘俊达\n"); example();

printf("\n请输入所要建立的二叉树:\n");

CreateT(&T);

InitT(&T);

int i;

printf("先序遍历二叉树:\n");

PreOrderT(&T,visit);

printf("\n");

printf("\n中序遍历二叉树:\n");

InOrderT(&T,visit);

printf("\n");

printf("\n后序遍历二叉树:\n");

PostOrderT(&T,visit);

printf("\n");

system("PAUSE");

return 0;

}

六、程序截图

1.范例函数显示,并输入先序二叉树节点值

2.先序遍历二叉树

相关文档
最新文档