2007winter

做自己真心想做的事,你就没事了

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

将数据和二叉链表的各种运算(如二叉链表的生成,二叉链表的前序、中序、后序遍历)封装在一起,构成二叉链表类。

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;

}

 

posted on 2012-06-04 11:11  2007winter  阅读(222)  评论(0)    收藏  举报