![]() |
#2
rjsp2018-06-05 13:10
首先要交代你想干什么
![]() #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; } |
#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这个函数