| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1373 人关注过本帖
标题:c++二叉树问题
只看楼主 加入收藏
梁13760
Rank: 1
等 级:新手上路
帖 子:3
专家分:3
注 册:2018-5-30
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:3 
c++二叉树问题
#include<iostream>
using namespace std;
template<class DataType>
struct BiNode
{
DataType data;
BiNode<DataType>*lchild,*rchild;
};
template<class DataType>
class BiTree
{
    public:
      BiTree(){root=Creat(root);}
      void PreOrder(){PreOrder(root);}
    private:
      BiNode<DataType>*root;
      BiNode<DataType>*Creat(BiNode<DataType>*bt);
      void PreOrder(BiNode<DataType>*bt);
 //     void nonpreorder(BiNode<DataType>*bt);
};
template<class DataType>
void BiTree<DataType>::PreOrder(BiNode<DataType>*bt)    //前序遍历
{
    if(bt==NULL)return;
    else{
          cout<<bt->data;
          PreOrder(bt->lchild);
        PreOrder(bt->rchild);
        }
}
template<class DataType>
BiNode<DataType>*BiTree<DataType>::Creat(BiNode<DataType>*bt)        //创建树
{
    char ch;
    cin>>ch;
    if(ch=='#')bt=NULL;
    else{
    BiNode<char> *bt;
    bt=new BiNode<char>;
    bt->data=ch;
    bt->lchild=Creat(bt->lchild);
    bt->rchild=Creat(bt->rchild);
}
    return bt;
}
main()
{
   BiTree<char> BT;
   BT.PreOrder();
}
下划线处的函数
例如输入AB#D##C##;
为什么没办法输出,是因为传参数root,这个root是NULL吗?(创建树的时候,结束的root)
我应该怎么回去这个A,再调用PreOrder这个函数
搜索更多相关主题的帖子: c++ template class void char 
2018-06-05 11:09
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:14 
首先要交代你想干什么

程序代码:
#include <iostream>

template<class DataType>
struct BiNode
{
    DataType data;
    BiNode<DataType>* lchild;
    BiNode<DataType>* rchild;

    BiNode( const DataType& data ) : data(data), lchild(), rchild()
    {
    }
    ~BiNode()
    {
        delete lchild;
        delete rchild;
    }

protected: // no-implement
    BiNode( const BiNode& );
    BiNode& operator=( const BiNode& );
};

template<class DataType>
class BiTree
{
public:
    BiTree() : root()
    {
    }
    ~BiTree()
    {
        delete root;
    }

protected: // no-implement
    BiTree( const BiTree& );
    BiTree& operator=( const BiTree& );

private:
    BiNode<DataType>* root;

    friend std::istream& operator>>( std::istream& is, BiTree<DataType>& tree )
    {
        struct foo
        {
            std::istream& operator()( std::istream& is, BiNode<DataType>*& pnode )
            {
                DataType data;
                if( !(is>>data) || data=='#' )
                    return is;
                pnode = new BiNode<DataType>( data );
                operator()( is, pnode->lchild );
                operator()( is, pnode->rchild );
                return is;
            }
        } foo;

        delete tree.root;
        tree.root = NULL;
        return foo( is, tree.root );
    }
    friend std::ostream& operator<<( std::ostream& os, const BiTree<DataType>& tree )
    {
        struct foo
        {
            std::ostream& operator()( std::ostream& os, BiNode<DataType>* const& pnode )
            {
                if( pnode )
                {
                    os << pnode->data;
                    operator()( os, pnode->lchild );
                    operator()( os, pnode->rchild );
                }
                else
                    os << '#';
                return os;
            }
        } foo;

        return foo( os, tree.root );
    }
};

int main( void )
{
    using namespace std;

    BiTree<char> bt;
    cin >> bt; // AB#D##C##
    cout << bt << endl;
}

2018-06-05 13:10
梁13760
Rank: 1
等 级:新手上路
帖 子:3
专家分:3
注 册:2018-5-30
收藏
得分:0 
回复 2楼 rjsp
创建一个二叉链表,并且前序编译
2018-06-05 13:43
快速回复:c++二叉树问题
数据加载中...
 
   



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

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