二叉排序树

温习二叉排序树时敲的代码。
1
#include "stdafx.h" 2 #include <iostream> 3 using namespace std; 4 template<typename T> struct BNode 5 { 6 BNode(T d,BNode *l,BNode *r):data(d),left(l),right(r){} 7 T data; 8 BNode *left; 9 BNode *right; 10 }; 11 template<typename TData> class BTree 12 { 13 BNode<TData> *Header; 14 void Insert(const TData,BNode<TData> *&p); 15 void PreOder(const BNode<TData> *); 16 void InOder(const BNode<TData> *); 17 void PosOder(const BNode<TData> *); 18 void DeleteTree(BNode<TData> *); 19 public: 20 BTree():Header(NULL){}; 21 bool SearchNode(const BNode<TData> *,const TData &); 22 void Insert(const TData &); 23 void PreOder(); 24 void InOder(); 25 void PosOder(); 26 ~BTree(); 27 };//BTree 28 29 template<typename TData> BTree<TData>::~BTree() 30 { 31 DeleteTree(Header); 32 } 33 template<typename TData> void BTree<TData>::Insert(const TData data,BNode<TData> *&P) 34 { 35 if(NULL==P) 36 P = new BNode<TData>(data,NULL,NULL);// 37 else if(P->data < data) 38 { 39 Insert(data,P->right); 40 } 41 else if(P->data > data) 42 { 43 Insert(data,P->left); 44 } 45 } 46 template<typename TData> void BTree<TData>::Insert(const TData &data) 47 { 48 Insert(data,Header); 49 } 50 template<typename TData> void BTree<TData>::PreOder(const BNode<TData> *node) 51 { 52 if(NULL!=node) 53 { 54 cout<<node->data<<" "; 55 PreOder(node->left); 56 PreOder(node->right); 57 } 58 } 59 template<typename TData> void BTree<TData>::PreOder() 60 { 61 PreOder(Header); 62 } 63 template<typename TData> void BTree<TData>::InOder(const BNode<TData> *node) 64 { 65 if(NULL!=node) 66 { 67 InOder(node->left); 68 cout<<node->data<<" "; 69 InOder(node->right); 70 } 71 } 72 template<typename TData> void BTree<TData>::InOder() 73 { 74 InOder(Header); 75 } 76 template<typename TData> void BTree<TData>::PosOder(const BNode<TData> *node) 77 { 78 if(NULL!=node) 79 { 80 PosOder(node->left); 81 PosOder(node->right); 82 cout<<node->data<<" "; 83 } 84 } 85 template<typename TData> void BTree<TData>::PosOder() 86 { 87 PosOder(Header); 88 } 89 template<typename TData> void BTree<TData>::DeleteTree(BNode<TData> *node) 90 { 91 if(NULL!=node) 92 { 93 if(NULL!=node->left) 94 DeleteTree(node->left); 95 if(NULL!=node->right) 96 DeleteTree(node->right); 97 delete node; 98 } 99 } 100 template<typename TData> bool BTree<TData>::SearchNode(const BNode<TData> *root,const TData &data) 101 { 102 if(NULL==root) 103 return false; 104 else if(root->data > data) 105 return SearchNode(root->left,data); 106 else if(root->data < data) 107 return SearchNode(root->right,data); 108 else 109 return true; 110 } 111 int main(int argc,char *argv[]) 112 { 113 BTree<int> b; 114 int in; 115 while(cin>>in) 116 b.Insert(in); 117 b.PreOder();cout<<endl; 118 b.InOder();cout<<endl; 119 b.PosOder();cout<<endl; 120 b.Insert(9); 121 b.PreOder();cout<<endl; 122 b.InOder();cout<<endl; 123 b.PosOder(); 124 return(0); 125 }

 

posted @ 2013-06-07 22:42  alenpgl  阅读(123)  评论(0)    收藏  举报