内容发布更新时间 : 2025/2/27 14:57:40星期一 下面是文章的全部内容请认真阅读。
实验四 二叉树的遍历
1. 实验目的
(1) 进一步掌握指针变量的用途和程序设计方法。
(2) 掌握二叉树的结构特征,以及链式存储结构的特点及程序设计方法。 (3) 掌握构造二叉树的基本方法。 (4) 掌握二叉树遍历算法的设计方法。
2. 实验要求
(1) 认真阅读和掌握和本实验相关的教材内容。
(2) 利用二叉链表建立一棵二叉树,分别采用先序、中序和后序遍历该二叉树,并输出遍历的序列。
(3) 上机运行程序。
(4) 保存和打印出程序的运行结果,并结合程序进行分析。
3. 程序代码
#include
typedef struct BiTNode{ //定义二叉树 char data;
struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;
void CreateBiTree(BiTree *T){ char data;
//按先序次序输入二叉树中结点的值(一个字符),‘#’表示空树 scanf(\ if(data == '#'){ *T = NULL; } else{
*T = (BiTree)malloc(sizeof(BiTNode));
//生成根结点
(*T)->data = data; //构造左子树
CreateBiTree(&(*T)->lchild); //构造右子树
CreateBiTree(&(*T)->rchild); } }
void Visit(BiTree T){ //输出
if(T->data != '#'){
printf(\ } }
void PreOrder(BiTree T){ //先序遍历
if(T != NULL){ //访问根节点 Visit(T);
//访问左子结点
PreOrder(T->lchild); //访问右子结点
PreOrder(T->rchild); } }
void InOrder(BiTree T){ //中序遍历
if(T != NULL){
//访问左子结点
InOrder(T->lchild); //访问根节点 Visit(T);
//访问右子结点
InOrder(T->rchild); }
}
void PostOrder(BiTree T){ //后序遍历
if(T != NULL){
//访问左子结点
PostOrder(T->lchild); //访问右子结点
PostOrder(T->rchild); //访问根节点 Visit(T); } }
int main() {
BiTree T;
printf(\以#代表空先序遍历\\n输入二叉树:\ CreateBiTree(&T);
printf(\先序遍历:\\n\ PreOrder(T);
printf(\
printf(\中序遍历:\\n\ InOrder(T);
printf(\
printf(\后序遍历:\\n\ PostOrder(T);
return 0; }
4. 实验结果
以#代表空先序遍历 输入二叉树:ab##c##
先序遍历: a b c
中序遍历: b a c
后序遍历: b c a
--------------------------------
Process exited after 10.89 seconds with return value 0 请按任意键继续. . .
5. 心得体会
这次的试验让我对二叉树有了更进一步的理解,对二叉树的操作也更加熟悉。本次试验是对二叉树进行建立,并掌握先序遍历,中序遍历和后续遍历,虽然用的是递归的方法相对简单一点,但是理解起来还是有点困难。二叉树是数据结构中很重要的一部分知识,也是数据结构的重难点,我相信在以后的学习中还会遇到,而我更要进行更深入的学习。
实验五 图的遍历
1. 实验目的
(1)加深理解图的非线性结构特点,灵活运用图的存储结构、图的深度优先搜索和广度优先搜索来解决有关应用问题。 (2)加深递归程序设计的训练。
(3)注重提高关于模型选择、算法设计和分析方面的能力。
2. 实验要求
(1) 认真阅读和掌握和本实验相关的教材内容。
(2) 利用邻接矩阵或邻接表存储一张图,分别采用图的深度优先搜索和广度优先搜索遍历该图,并输出遍历结果。 (3) 上机运行程序。
(4) 保存和打印出程序的运行结果,并结合程序进行分析。
3. 程序代码
#include
#define MAXVEX 100 //最大顶点数
#define INFINITY 65535 //用65535来代表无穷大
int visited[MAXVEX]={0};
typedef struct {
char vexs[MAXVEX]; //顶点表
int arc[MAXVEX][MAXVEX]; //邻接矩阵,可看作边 int numVertexes, numEdges; //图中当前的顶点数和边数 }Graph;