实验五 二叉树操作及应用
一、实验实习目的及要求
掌握二叉树的定义、结构特征,以及各种存储结构的特点及使用范围,各种遍历算法。掌握用指针类型描述、访问和处理二叉树的运算。掌握前序或中序的非递归遍历算法。
二、实验实习设备(环境)及要求(软硬件条件)
实验在计算机机房,应用软件VC++;
三、实验实习项目、内容与步骤
有如下二叉树:
代码给出了该二叉树的链式存储结构的建立、前序、中序、后序遍历的算法,同时也给出了查询“E”是否在二叉树里的代码。代码有三处错误,有标识,属于逻辑错误,对照书中的代码仔细分析后,请修改了在电脑里运行。
四、实验实习所得结果及分析
三处修改见上图,这三处错误要结合前序,中序,后序的原理来修改。前序,需要先输出根节点,在递归左子树,在递归右子树;中续是先递归左子树,再输出根节点,最后递归右子树;后续是先递归左子树,最后递归右子树,再输出根节点;结合原理很容易找出错误。
五、实验实习结果分析和(或)源程序调试过程
#include <stdlib.h>
#include <stdio.h>
typedef char DataType;
typedef struct Node
{
DataType data;/*数据域*/
struct Node *leftChild;/*左子树指针*/
struct Node *rightChild;/*右子树指针*/
}BiTreeNode;/*结点的结构体定义*/
/*初始化创建二叉树的头结点*/
void Initiate(BiTreeNode **root)
{
*root = (BiTreeNode *)malloc(sizeof(BiTreeNode));
(*root)->leftChild = NULL;
(*root)->rightChild = NULL;
}
void Destroy(BiTreeNode **root)
{
if((*root) != NULL && (*root)->leftChild != NULL)
Destroy(&(*root