数据结构实验报告二叉树

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

《数据结构与算法》实验报告

专业班级姓名学号

实验项目

实验三二叉树。

实验目的

1、掌握用递归方法实现二叉树的遍历。

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

题目:

(1)编写二叉树的遍历操作函数。

①先序遍历,递归方法re_preOrder(TREE *tree)

②中序遍历,递归方法re_midOrder(TREE *tree)

③后序遍历,递归方法re_postOrder(TREE *tree)

(2)调用上述函数实现先序、中序和后序遍历二叉树操作。

算法设计分析

(一)数据结构的定义

要求用c语言编写一个演示程序,首先建立一个二叉树,让用户输入一个二叉树,实现该二叉树的便利操作。

二叉树型存储结构定义为:

typedef struct TNode

{ char data;//字符型数据

struct TNode *lchild,*rchild;//左右孩子指针

}TNode,* Tree;

(二)总体设计

程序由主函数、二叉树建立函数、先序遍历函数、中序遍历函数、后序遍历函数五个函数组成。其功能描述如下:

(1)主函数:统筹调用各个函数以实现相应功能。

int main()

(2)二叉树建立函数:根据用户意愿运用先序遍历建立一个二叉树。

int CreateBiTree(Tree &T)

(3)先序遍历函数:将所建立的二叉树先序遍历输出。

void PreOrder(Tree T)

(4)中序遍历函数:将所建立的二叉树中序遍历输出。

void InOrder(Tree T)

(5)后序遍历函数:将所建立的二叉树后序遍历输出。

void PostOrder(Tree T)

(三)各函数的详细设计:

(1)建立一个二叉树,按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树。对T 动态分配存储空间,生成根节点,构造左、右子树

(2)编写先序遍历函数,依次访问根节点、左子结点、右子节点

(3)编写中序遍历函数,依次访问左子结点、根节点、右子节点

(4)编写后序遍历函数,依次访问左子结点、右子节点、根节点

(5)编写主函数,调用各个函数,以实现二叉树遍历的基本操作。

实验测试结果及结果分析

(一)测试结果

输入HAD##C#B##GF#E###

(二)结果分析

调试程序时,出现了许多错误。如:将函数定义为有返回值类型时,总是忘记return 0语句,因为不需要返回一个实际值,所以返回0值很容易被忽略。对于递归调用的使用不熟练,翻书及上网查询后才会应用。

实验总结

这次实验主要是通过先序序列建立二叉树,和二叉树的先序、中序、后续递归遍历算法。通过这次实验,我巩固了二叉树这部分知识,从中体会理论知识的重要性。在做实验之前,要充分的理解本次实验的理论依据。

例如进行二叉树的遍历的时候,要先理解各种遍历的特点。先序遍历是先遍历根节点,再依次先序遍历左右子树。中序遍历是先中序遍历左子树,再访问根节点,最后中序遍历右子树。而后序遍历则是先依次后续遍历左右子树,再访问根节点。

附录实验程序代码

遍历二叉树

#include

#include

typedef struct TNode

{ char data;//字符型数据

struct TNode *lchild,*rchild;//左右孩子指针

}TNode,* Tree;

int CreateTree(Tree &T) //按先序序列创建二叉树{

char data;

scanf("%c",&data);

if(data == '#')//‘#’表示空树

{

T = NULL;

} else

{ //按先序序列输入二叉树

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

T->data = data;

CreateTree(T->lchild);

CreateTree(T->rchild);

}

return 0;

}

void Visit(Tree T)

{

if(T->data != '#')

{

printf("%c ",T->data);

}

}

/*先序遍历函数*/

void PreOrder(Tree T)

{

if(T != NULL)

{

Visit(T);

PreOrder(T->lchild);

PreOrder(T->rchild);

}

}

/*中序遍历函数*/

void InOrder(Tree T)

{

if(T != NULL)

{

InOrder(T->lchild);

Visit(T);

InOrder(T->rchild);

}

}

void PostOrder(Tree T)

{

if(T != NULL)

{

PostOrder(T->lchild);

PostOrder(T->rchild);

Visit(T);

}

}

/*主函数*/

int main()

{

Tree T;

CreateTree(T);

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

PreOrder(T);

printf("\n");

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

InOrder(T);

printf("\n");

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

PostOrder(T);

printf("\n");

return 0;

}

相关文档
最新文档