头文件
#ifndef Bitree_H
#define Bitree_H
template <class Datatpye>
struct Binode
{
Datatpye data;
Binode<Datatpye>*lchild,*rchild;
};
template<class Datatpye>
class Bitree
{
public:
Bitree(){root=Create(root);}
~Bitree(){Release(root);}
void Preorder(){Preorder(root);}
void Inorder(){Inder(root);}
void Postorder(){Postorder(root);}
private:
Binode <Datatpye>*root;
Binode<Datatpye>* Create(Binode<Datatpye>*bt);
void Release(Binode<Datatpye>*bt);
void Preorder(Binode<Datatpye>*bt);
void Inorder(Binode<Datatpye>*bt);
void Postorder(Binode<Datatpye>*bt);
};
#endif
函数定义
#include<iostream>
using namespace std;
#include "Bitree.h"
template <class Datatpye> //构造函数
Binode<Datatpye>* Bitree<Datatpye>::Create(Bitree<Datatpye>*bt)
{ cout<<"请输入结点数据"<<endl;
cin>>ch;
if(ch=='#')bt=NULL; //建立一棵空树
else{
bt=new Binode;bt->data=ch; //生成一个结点,数据域为ch
bt->lchild=Create(bt->lchild);//递归建立左子树
bt->rchild=Create(bt->rchild);//递归建立右子树
}
return bt;
}
template <class Datatpye> //前序遍历
void Bitree<Datatpye>::Preorder(Binode<Datatpye>*bt)
{
if(bt==NULL) return;
else {
cout<<bt->data;
Preorder(bt->lchild);
Preorder(bt->rchild);
}
}
template <class Datatpye> //中序遍历
void Bitree<Datatpye>::Inorder(Binode<Datatpye>*bt)
{
if(bt==NULL)return;
else
{
Inorder(bt->lchild);
cout<<bt->data;
Inorder(bt->rchild);
}
}
template <class Datatpye> //后序遍历
void Bitree <Datatpye> ::Postorder(Binode<Datatpye>*bt)
{
if (bt==NULL) return ;
else{
Postorder(bt->lchild);
Posterder(bt->rchild);
cout<<bt->data;
}
}
template <class Datatpye>
void Bitree <Datatpye> ::Release(Binode<Datatpye>*bt)
{
if(bt!=NULL)
{
Release(bt->lchild);
Release(bt->rchild);
delete bt;
}
}
主函数
#include<iostream>
using namespace std;
#include"Bitree.cpp"
int main()
{
Bitree T();
cout<<"前序遍历"<<endl;
T.Preorder();
cout<<endl;
cout<<"中序遍历"<<endl;
T.Inorder();
cout<<endl;
cout<<"后序遍历"<<endl;
T.Postorder();
cout<<endl;
return 0;
}