张信哲 发表于 2008-5-14 20:35

二叉树遍历问题

#include <iostream>
using namespace std;

template <class T>
class TreeNode
{
    private:
        TreeNode<T> *left;
        TreeNode<T> *right;
        T data;
    public:
        TreeNode(const T& item,TreeNode<T> *lptr=NULL,TreeNode<T> *rptr=NULL);
        TreeNode<T> * GetLeft(void) const;
        TreeNode<T> * GetRight(void) const;
        static TreeNode<T>* GetTreeNode(T item,TreeNode<T> *lptr=NULL,TreeNode<T> *rptr=NULL);
        void FreeTreeNode(TreeNode<T> *p);

        void PreOrder(TreeNode<T> *t,void visit(T& item));
        void InOrder(TreeNode<T> *t,void visit (T& item));
        void PostOrder(TreeNode<T> *t,void visit(T& item));
};

//实现类中的函数

template <class T>
TreeNode<T>::TreeNode(const T& item,TreeNode<T> *lptr,TreeNode<T> *rptr):data(item),left(lptr),right(rptr)
{}

template <class T>
TreeNode<T>* TreeNode<T>::GetLeft(void) const
{
    return (*left);
}

template <class T>
TreeNode<T>* TreeNode<T>::GetRight(void) const
{
    return (*right);
}

template <class T>
TreeNode<T>* TreeNode<T>::GetTreeNode(T item,TreeNode<T> *lptr,TreeNode<T> *rptr)
{
    TreeNode<T> *p;
    p=new TreeNode<T>(item,lptr,rptr);
    if(p==NULL)
    {
        cout<<"memory allocation failure!";
        exit(1);
    }
    return p;
}

template <class T>
void TreeNode<T>::FreeTreeNode(TreeNode<T> *p)
{
    delete p;
}
//visit函数
template <class T>
void visit(T *c)  
{
    cout<<(*c)<<endl;;
}

//遍历部分
//A:先序
template<class T>
void TreeNode<T>::PreOrder(TreeNode<T> *t,void visit(T& item))
{
    if(t!=NULL)
    {
        visit(t->data);
        PreOrder(t->left(),visit);
        PreOrder(t->right(),visit);
    }
}

//B:中序
template<class T>
void  TreeNode<T>::InOrder(TreeNode<T> *t,void visit (T& item))
{
    if(t!=NULL)
    {
        InOrder(t->left(),visit);
        visit(t->data);
        InOrder(t->right(),visit);
    }
}

//C:后序
template<class T>
void TreeNode<T>::PostOrder(TreeNode<T> *t,void visit(T& item))
{
    if(t!=NULL)
    {
        PostOrder(t->left(),visit);
        PostOrder(t->right(),visit);
        visit(t->data);
    }
}

class CItem
{
public:
    int data;
    CItem(int data)
    {
        this->data = data;
    }
};

void main()
{
    TreeNode<CItem> *p = TreeNode<CItem>::GetTreeNode( CItem(1), NULL, NULL);
}
在主函数里加遍历,有空帮看看吧。谢谢

余来 发表于 2008-5-14 21:42

LZ,这是,作业吧。。。。

张信哲 发表于 2008-5-14 21:50

老师没布置,我做着玩的,可以解决吗?

张信哲 发表于 2008-5-15 21:44

帮看看啊,第一次用模板做,有点郁闷

张信哲 发表于 2008-5-15 21:55

其实你也可以告诉我,怎么调用原来类里面建节点的函数建树。谢谢。

张信哲 发表于 2008-5-16 19:46

怎么没人回我啊

枯叶 发表于 2008-12-15 21:40

你加点解析去,看起来耗费精神

页: [1]

编程论坛