一个功能简单的二叉树模板

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

你可能感兴趣的:(二叉树)