一、实验目的:
1、熟悉二叉树结点的结构和对二叉树的基本操作;
2、掌握对二叉树每一种操作的具体实现;
3、学会递归方法和非递归方法实现二叉树的运算某重操作。
二、实验内容:
1、建立一棵二叉树。
2、用递归算法对二叉树进行先序、中序和后序遍历。
3、用非递归算法对二叉树进行先序、中序和后序遍历。
三、实验要求:
编写实现二叉树建立和遍历的基本算法的函数,并在此基础上设计一个主程序完成如下功能:
⑴定义二叉树的二叉链表存储结构;
⑵以扩展先序遍历序列建立二叉树的二叉链表;
⑶用递归算法分别实现二叉树的先序、中序和后续遍历,并打印输出;
⑷用非递归算法分别实现二叉树的先序、中序和后续遍历,并打印输出;
⑸计算二叉树的高度;
⑹计算二叉树叶子节点的个数。
四、实验步骤:
#include
#include<stdlib.h>
#include
#include
using namespace std;
typedef char ElemType;
//二叉树的二叉链表结构,也就是二叉树的存储结构,1个数据域,2个指针域(分别指向左右孩子)
typedef struct BiTNode
{
ElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
//二叉树的建立,按前序遍历的方式建立二叉树
void CreateBiTree(BiTree *T)
{
ElemType ch;
cin >> ch;
if (ch == '#')
*T = NULL; //保证是叶结点
else
{
*T = (BiTree)malloc(sizeof(BiTNode));
//if (!*T)
//exit(OVERFLOW); //内存分配失败则退出。
(*T)->data
= ch;//生成结点
CreateBiTree(&(*T)->lchild);//构造左子树
CreateBiTree(&(*T)->rchild);//构造右子树
}
}
//表示对遍历到的结点数据进行的处理操作,此处操作是将树结点前序遍历输出
void operation1(ElemType ch)
{
cout << ch
<< " ";
}
//此处在输出的基础上,并输出层数
void operation2(ElemType ch, int level)
{
cout << ch
<< “在第” << level << “层” << " ";
}
//递归方式前序遍历二叉树
void PreOrderTraverse(BiTree T, int level)
{
if (T == NULL)
return;
/*此处表示对遍历的树结点进行的操作,根据你自己的要求进行操作,这里只是输出了结点的数据*/
operation1(T-