Guest User

Untitled

a guest
Oct 22nd, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.19 KB | None | 0 0
  1. int main() {
  2. BinarySearchTree<int> me;
  3. me.insert (20);
  4. me.insert (30);
  5. me.insert (-2);
  6. me.insert (10);
  7. me.insert (7);
  8. me.insert (35);
  9. me.insert (24);
  10. me.printTree();
  11. me.findMin();
  12. me.findMax();
  13. me.contains(35);
  14. me.contains(36);
  15. me.remove(-2);
  16. me.printTree();
  17. me.makeEmpty();
  18. me.isEmpty();
  19. me.printTree();
  20. return 0;
  21.  
  22. using namespace std;
  23.  
  24. template <typename E>
  25. class BinarySearchTree {
  26. public:
  27. /**
  28. * Default constructor
  29. */
  30. BinarySearchTree() {
  31. }
  32.  
  33. /**
  34. * Destructor
  35. */
  36. ~BinarySearchTree() {
  37. purge(root);
  38. }
  39.  
  40. int findMin(){
  41. return findMin(root) -> data;
  42. }
  43.  
  44. int findMax(){
  45. return findMax(root) -> data;
  46. }
  47.  
  48. bool contains(const E & x) const{
  49. if(contains(x, root))
  50. cout << "True" << endl;
  51. else
  52. cout << "False" <<endl;
  53. }
  54.  
  55. bool isEmpty(){
  56. if(isEmpty(root))
  57. cout << "True" << endl;
  58. else
  59. cout << "False" <<endl;
  60. }
  61.  
  62. void makeEmpty(){
  63. makeEmpty(root);
  64. }
  65.  
  66. void remove(const E & x){
  67. remove(x, root);
  68. }
  69.  
  70. void insert (E item) {
  71. insert (item, root);
  72. }
  73.  
  74. void printTree(ostream& out = cout) const {
  75. print (out, root);
  76. cout << endl;
  77. }
  78.  
  79. private:
  80. struct Node {
  81. E data;
  82. shared_ptr<Node> left, right;
  83. };
  84.  
  85. shared_ptr<Node> root;
  86.  
  87. void print (ostream& out, shared_ptr<Node> ptr) const {
  88. /* in order traversal */
  89. if (ptr != nullptr) {
  90. print (out, ptr->left);
  91. out << ptr->data << " ";
  92. print (out, ptr->right);
  93. }
  94. }
  95.  
  96. void insert (E item, shared_ptr<Node>& ptr) const {
  97. if (ptr == nullptr) {
  98. ptr = make_shared<Node>();
  99. ptr->data = item;
  100. } else if (item < ptr->data) {
  101. insert(item, ptr->left);
  102. } else if (item > ptr->data) {
  103. insert(item, ptr->right);
  104. } else {
  105. // attempt to insert a duplicate item
  106. }
  107. }
  108.  
  109. void purge (shared_ptr<Node> ptr) {
  110. if (ptr != nullptr) {
  111. purge (ptr->left);
  112. purge (ptr->right);
  113. ptr.reset();
  114. }
  115. }
  116.  
  117. bool contains(const E & x, shared_ptr<Node> t) const{
  118. if(t == nullptr){
  119. return false;
  120. }
  121. else if( x < t-> data){
  122. return contains(x, t->left);
  123. }
  124. else if(t-> data < x){
  125. return contains(x, t->right);
  126. }
  127. else{
  128. return true;
  129. }
  130. }
  131.  
  132. shared_ptr<Node> findMin(shared_ptr<Node> t) const{
  133. if (t != nullptr){
  134. while(t-> left != nullptr){
  135. t = t->left;
  136. }
  137. }
  138. cout << t->data << endl;
  139. return t;
  140. }
  141.  
  142. shared_ptr<Node> findMax(shared_ptr<Node> t) const{
  143. if (t != nullptr){
  144. while(t-> right != nullptr){
  145. t = t->right;
  146. }
  147. }
  148. cout << t->data << endl;
  149. return t;
  150. }
  151.  
  152. void remove(const E & x, shared_ptr<Node> t){
  153. if(t == nullptr){
  154. return;
  155. }
  156. if (x > t-> data){
  157. remove(x, t-> left);
  158. }
  159. else if(t->data > x){
  160. remove(x, t-> right);
  161. }
  162. else if( t-> left != nullptr && t->right != nullptr){
  163. t-> data = findMin(t-> right) -> data;
  164. remove(t->data, t-> right);
  165. }
  166. else {
  167. t.reset();
  168. }
  169. }
  170.  
  171. void makeEmpty(shared_ptr<Node> t){
  172. if ( t != nullptr ){
  173. makeEmpty(t -> left);
  174. makeEmpty(t-> right);
  175. t.reset();
  176. }
  177. }
  178.  
  179. bool isEmpty(shared_ptr<Node> t) const{
  180. if( t = nullptr){
  181. return true;
  182. }
  183. else
  184. return false;
  185. }
  186.  
  187.  
  188.  
  189. };
Add Comment
Please, Sign In to add comment