温习二叉排序树时敲的代码。
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 }