实验五 二叉树的实现
一.实验目的
1.掌握二叉树的逻辑结构;
2.掌握二叉树的二叉链表存储结构;
3.验证二叉树的二叉链表存储及遍历操作。
1.建立一棵含有n个结点的二叉树,采用二叉链表存储;
2.输出前序、中序和后序遍历该二叉树的遍历结果。
三.实验提示
本实验假定二叉树的数据元素为char型,要求学生将实验程序调试通过后,用模板类改写;加入层序遍历二叉树等基本操作。
四.实验环境
PC微机
DOS操作系统或Windows操作系统
Turbo C程序集成环境或Visual C++程序集成环境
五.实验步骤及结果
(1)新建一个头文件Bitree.h,该头文件包括二叉链表的结点结构、二叉链表类Bitree的定义,
#ifndef BiTree_H
#define BiTree_H
struct BiNode
{
char data;
BiNode*lchild,*rchild;
};
class BiTree
{
public:
BiTree(){root=Creat(root);}
~BiTree(){Release(root);}
void PreOrder(){PreOrder(root);}
void InOrder(){InOrder(root);}
void PostOrder(){PostOrder(root);}
private:
BiNode*root;
BiNode*Creat(BiNode*bt);
void Release(BiNode*bt);
void PreOrder(BiNode*bt);
void InOrder(BiNode*bt);
void PostOrder(BiNode*bt);
};
#endif
(2)新建一个源工程文件Bitree.cpp,该文件包括类BiTree中成员函数的定义:
#include <iostream>
using namespace std;
#include "Bitree.h"
BiNode*BiTree::Creat(BiNode*bt)
{
char ch;
cout<<"请输入创建一棵二叉树的结点数据"<<endl;
cin>>ch;
if(ch=='#')return NULL;
else{
bt=new BiNode;
bt->data=ch;
bt->lchild=Creat(bt->lchild);
bt->rchild=Creat(bt->rchild);
}
return bt;
}
void BiTree::Release(BiNode*bt)
{
if(bt!=NULL){
Release(bt->lchild );
Release(bt->rchild );
delete bt;
}
}
void BiTree::PreOrder(BiNode*bt)
{
if(bt=NULL)return;
else{
cout<<bt->data <<" ";
PreOrder(bt->lchild);
PreOrder(bt->rchild);
}
}
void BiTree::InOrder(BiNode*bt)
{
if(bt==NULL)return;
else{
InOrder(bt->lchild);
cout<<bt->data <<" ";
InOrder(bt->rchild);
}
}
void BiTree::PostOrder(BiNode*bt)
{
if(bt==NULL)return;
else{
PostOrder(bt->lchild);
PostOrder(bt->rchild);
cout<<bt->data <<" ";
}
}
(3)新建一个源文件Bitree_main.cpp,该文件包括主函数:
#include<iostream>
using namespace std;
#include"Bitree.h"
int main()
{
BiTree T;
cout<<"------前序遍历------"<<endl;
T.PreOrder ();
cout<<endl;
cout<<"------中序遍历------"<<endl;
T.InOrder ();
cout<<endl;
cout<<"------后序遍历------"<<endl;
T.PostOrder ();
cout<<endl;
return 0;
}
运行结果:
。
六.实验小结
问题1.多次试验老是运行不出来,原因还没弄懂。
解决操作:输入左右子树和空格键。
例如:输入A # B # #
问题2.:如图:
解决操作如下图:在if(bt==NULL)return;中少了一个符号=
重新运行程序,得到数据
总结:一个小小的疏忽,就能导致整个程序运行部出来。编程要做到步步仔细小心!