| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1253 人关注过本帖
标题:二叉树遍历问题
取消只看楼主 加入收藏
张信哲
Rank: 1
等 级:新手上路
帖 子:139
专家分:0
注 册:2008-4-3
收藏
 问题点数:0 回复次数:4 
二叉树遍历问题
#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-05-14 20:35
张信哲
Rank: 1
等 级:新手上路
帖 子:139
专家分:0
注 册:2008-4-3
收藏
得分:0 
老师没布置,我做着玩的,可以解决吗?

相信自己,学无止尽。
2008-05-14 21:50
张信哲
Rank: 1
等 级:新手上路
帖 子:139
专家分:0
注 册:2008-4-3
收藏
得分:0 
帮看看啊,第一次用模板做,有点郁闷

相信自己,学无止尽。
2008-05-15 21:44
张信哲
Rank: 1
等 级:新手上路
帖 子:139
专家分:0
注 册:2008-4-3
收藏
得分:0 
其实你也可以告诉我,怎么调用原来类里面建节点的函数建树。谢谢。

相信自己,学无止尽。
2008-05-15 21:55
张信哲
Rank: 1
等 级:新手上路
帖 子:139
专家分:0
注 册:2008-4-3
收藏
得分:0 
怎么没人回我啊

相信自己,学无止尽。
2008-05-16 19:46
快速回复:二叉树遍历问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017285 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved