实验四 二叉树基本操作的实现
一、实验学时: 2学时
二、实验目的
- 实现二叉树的有关基本操作
- 实现二叉树遍历操作
三、实验内容
- 二叉树的建立
- 二叉树的前序遍历、中序遍历、后序遍历
四、主要仪器设备及耗材
- 硬件:计算机一台
- 软件:VC++ 6.0,MSDN2003或者以上版本
五、实验步骤
- 分析问题
- 写出算法
- 编制程序
- 上机调试
- 分析结果
六、程序清单
#include<iostream>
using namespace std;
//定义二叉树的结构
typedef struct BiTNode{
char data; //结点数据域
struct BiTNode *lchild,*rchild; //左右孩子指针
}BiTNode,*BiTree;
//建立二叉树
void CreateBiTree(BiTree &T)
{
char ch;
cin>>ch;
if(ch=='#') T=NULL; //递归结束,建空树
else
{
T=new BiTNode; //生成根结点
T->data=ch; //根结点数据域置为ch
CreateBiTree(T->lchild); //递归创建左子树
CreateBiTree(T->rchild); //递归创建右子树
} //else
}
//先序遍历二叉链表
void PreOrderTraverse(BiTree T)
{
if(T)
{
cout<<T->data;
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
//中序遍历二叉链表
void InOrderTraverse(BiTree T)
{
if(T)
{
InOrderTraverse(T->lchild);
cout<<T->data;
InOrderTraverse(T->rchild);
}
}
//后序遍历二叉链表
void PostOrderTraverse(BiTree T)
{
if(T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
cout<<T->data;
}
}
int main()
{
BiTree bt;
printf("开始建树!请输入结点...\n");
CreateBiTree(bt);
printf("先序遍历:");
PreOrderTraverse(bt);
printf("\n");
printf("中序遍历:");
InOrderTraverse(bt);
printf("\n");
printf("后序遍历:");
PostOrderTraverse(bt);
printf("\n");
return 0;
}
七、运行结果及分析
八、小总结
- 这个内容比较少,主要用到了递归算法,在创建树和遍历树的代码中均有所体现。
- 理解一下hanoi问题这个就比较容易了。hanoi问题后面再写,这里说二叉树的问题。创建的话,比如输入ABC##DE#G##F###,它的递归建立过程如下图所示(很乱哈哈)
前序遍历中序遍历后序遍历都用递归,就不画了自己理解。