目前仅仅建议使用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 }

相关文章: