| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦赛孚耐:软件保护加密专家身份认证令牌USB KEY 
共有 266 人关注过本帖
标题:加个遍历函数(在主函数里)
收藏  订阅  推荐  打印
张信哲
Rank: 2
等级:注册会员
帖子:137
积分:1536
注册:2008-4-3
加个遍历函数(在主函数里)

#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);
}
搜索更多相关主题的帖子: TreeNode  遍历  void  函数  NULL  
2008-5-12 17:04
张信哲
Rank: 2
等级:注册会员
帖子:137
积分:1536
注册:2008-4-3

帮帮我啊

相信自己,学无止尽。
2008-5-14 20:29
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.055545 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved