数据结构实验报告二叉树.docxVIP

  • 16
  • 0
  • 约2.33千字
  • 约 8页
  • 2020-03-26 发布于江西
  • 举报
《数据结构与算法》实验报告 专业 班级 姓名 学号 实验项目 实验三 二叉树。 实验目的 掌握用递归方法实现二叉树的遍历。 加深对二叉树的理解,逐步培养解决实际问题的编程能力。 题目: (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) 2 (三)各函数的详细设计: 建立一个二叉树,按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树。对 T 动态分配存储空间,生成根节点,构造左、右子树 编写先序遍历函数,依次访问根节点、左子结点、右子节点 编写中序遍历函数,依次访问左子结点、根节点、右子节点 编写后序遍历函数,依次访问左子结点、右子节点、根节点 编写主函数,调用各个函数,以实现二叉树遍历的基本操作。 实验测试结果及结果分析 (一)测试结果 输入 HAD##C#B##GF#E### (二)结果分析 调试程序时,出现了许多错误。如:将函数定义为有返回值类型时,总是忘记 return 0 语句,因为不需要返回一个实际值,所以返回 0 值很容易被忽略。对于递归调用的使用不 熟练,翻书及上网查询后才会应用。 实验总结 这次实验主要是通过先序序列建立二叉树,和二叉树的先序、中序、后续递归遍历算 法。通过这次实验,我巩固了二叉树这部分知识,从中体会理论知识的重要性。 在做实验之 前,要充分的理解本次实验的理论依据。 例如进行二叉树的遍历的时候,要先理解各种遍历的特点。先序遍历是先遍历根节点, 再依次先序遍历左右子树。中序遍历是先中序遍历左子树,再访问根节点,最后中序遍历 右子树。而后序遍历则是先依次后续遍历左右子树,再访问根节点。 附录 实验程序代码 遍历二叉树 #include stdio.h #include stdlib.h typedef struct TNode { char data;//字符型数据 struct TNode *lchild,*rchild;//左右孩子指针 }TNode,* Tree; 3 /*建立二叉树函数*/ 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); } } 4 /*后序遍历函数*/ void PostOrder(Tree T) { if(T != NULL) { PostOrder(T

文档评论(0)

1亿VIP精品文档

相关文档