将数据和二叉链表的各种运算(如二叉链表的生成,二叉链表的前序、中序、后序遍历)封装在一起,构成二叉链表类。
Binary_Tree.h:
#include <iostream> using namespace std; //定义二叉链表结点类型 template<class T> struct Btnode { T d; Btnode *lchild; Btnode *rchild; }; //二叉链表类 template<class T> class Binary_Tree { private: Btnode<T> *BT; public: Binary_Tree() { BT=NULL; return; } void creat_Binary_Tree(T); void pretrav_Binary_Tree(); void intrav_Binary_Tree(); void postrav_Binary_Tree(); }; //生成二叉链表 template<class T> void Binary_Tree<T>::creat_Binary_Tree(T end) { Btnode<T> *p; T x; cin>>x; if (x==end) { return; } p=new Btnode<T>; p->d=x; p->lchild=NULL; p->rchild=NULL; BT=p; creat(p,1,end); creat(p,2,end); return; } template<class T> static void creat(Btnode<T> *p,int k, T end) { Btnode<T> *q; T x; cin>>x; if (x!=end) { q=new Btnode<T>; q->d=x; q->lchild=NULL; q->rchild=NULL; if (k==1) { p->lchild=q; } if (k==2) { p->rchild=q; } creat(q,1,end); creat(q,2,end); } return ; } //前序遍历二叉链表 template<class T> void Binary_Tree<T>::pretrav_Binary_Tree() { Btnode<T> *p; p=BT; //从根结点开始前序遍历 pretrav(p); cout<<endl; return; } template<class T> static void pretrav(Btnode<T> *p) { if (p!=NULL) { cout<<p->d<<" "; pretrav(p->lchild); pretrav(p->rchild); } return ; } //中序遍历二叉链表 template<class T> void Binary_Tree<T>::intrav_Binary_Tree() { Btnode<T> *p; p=BT; intrav(p); cout<<endl; return; } template<class T> static void intrav(Btnode<T> *q) { if (q!=NULL) { intrav(q->lchild); cout<<q->d<<" "; intrav(q->rchild); } return ; } //后续遍历二叉树 template<class T> void Binary_Tree<T>::postrav_Binary_Tree() { Btnode<T> *p; p=BT; postrav(p); cout<<endl; return; } template<class T> static void postrav(Btnode<T> *q) { if (q!=NULL) { postrav(q->lchild); postrav(q->rchild); cout<<q->d<<" "; } return ; }
Binary_Tree.cpp:
#include "Binary_Tree.h" int main() { Binary_Tree<int> b; cout<<"输入各结点值,以-1为结束符值:"<<endl; b.creat_Binary_Tree(-1); cout<<"前序序列:"<<endl; b.pretrav_Binary_Tree(); cout<<"中序序列:"<<endl; b.intrav_Binary_Tree(); cout<<"后序序列:"<<endl; b.postrav_Binary_Tree(); return 0; }
 
                     
                    
                 
                    
                 

 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号