目前仅仅建议使用char类型数据,因为之前cin.fail()函数处理失败,有点小迷惑,所以暂时改用了固定无效字符限定的形式处理。
麻雀虽小,五脏俱全,这里面该处理的基本上都包含了。
1 #include <iostream> 2 3 using namespace std; 4 template<class T> 5 class BTree 6 { 7 private: 8 class Node 9 { 10 public: 11 T element;//Can be optimized 12 Node *LTree; 13 Node *RTree; 14 }; 15 Node *root; 16 bool creat(Node *&root); 17 void show(Node *root)const;//Read Only 18 bool B_Delete(Node *&root); 19 public: 20 BTree(); 21 ~BTree(); 22 void BTShow(); 23 bool BTCreat(); 24 void BTDelete(); 25 }; 26 template<class T> 27 BTree<T>::BTree() 28 { 29 root=NULL; 30 } 31 template<class T> 32 BTree<T>::~BTree() 33 { 34 B_Delete(root); 35 } 36 template<class T> 37 bool BTree<T>::BTCreat() 38 { 39 if(creat(root)); 40 return true; 41 return false; 42 } 43 template<class T> 44 bool BTree<T>::creat(Node *&root) 45 { 46 T tempaval; 47 cin>>tempaval; 48 if(tempaval!='#') 49 { 50 root=new Node; 51 if(!root) 52 { 53 root=NULL; 54 return false; 55 } 56 root->element=tempaval; 57 if(!creat(root->LTree)) 58 root->LTree=NULL; 59 if(!creat(root->RTree)) 60 root->RTree=NULL; 61 } 62 else 63 return false; 64 return true; 65 } 66 template<class T> 67 bool BTree<T>::B_Delete(Node *&root) 68 { 69 if(root) 70 { 71 B_Delete(root->LTree); 72 B_Delete(root->RTree); 73 cout<<root->element<<ends; 74 delete root; 75 return true; 76 } 77 else 78 return false; 79 } 80 template<class T> 81 void BTree<T>::show(Node *root)const 82 { 83 if(root) 84 { 85 cout<<root->element<<ends; 86 show(root->LTree); 87 show(root->RTree); 88 } 89 else 90 return; 91 } 92 template<class T> 93 void BTree<T>::BTShow() 94 { 95 show(root); 96 } 97 int main() 98 { 99 BTree<char> temp1; 100 temp1.BTCreat(); 101 temp1.BTShow(); 102 cout << "Hello world!" << endl; 103 return 0; 104 }