Advertisement
vkichukova

Untitled

Jan 30th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.98 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cstdlib>
  4. #include <ctime>
  5. #include <vector>
  6. using namespace std;
  7.  
  8. template <class T>
  9. class CompleteBinTree
  10. {
  11. private:
  12. T* values;
  13. int current;
  14. int capacity;
  15.  
  16. void resize();
  17. void clean();
  18. void copy(CompleteBinTree<T> const&);
  19. public:
  20. CompleteBinTree();
  21. ~CompleteBinTree();
  22. CompleteBinTree(CompleteBinTree<T> const&);
  23. CompleteBinTree& operator=(CompleteBinTree<T> const&);
  24.  
  25. void addElement(T const& x);
  26. int leftChildIndex(int index) const;
  27. int rightChildIndex(int index) const;
  28. bool empty() const;
  29. void create();
  30. void print() const;
  31. void printBFS();
  32. void printDFS(); // TO DO
  33. };
  34.  
  35. template <class T>
  36. CompleteBinTree<T>::CompleteBinTree()
  37. {
  38. capacity = 16;
  39. current = 0;
  40. values = new T[capacity];
  41. }
  42.  
  43. template <class T>
  44. CompleteBinTree<T>::~CompleteBinTree()
  45. {
  46. clean();
  47. }
  48.  
  49. template <class T>
  50. CompleteBinTree<T>::CompleteBinTree(CompleteBinTree<T> const& other)
  51. {
  52. copy(other);
  53. }
  54.  
  55. template <class T>
  56. CompleteBinTree<T>& CompleteBinTree<T>::operator=(CompleteBinTree<T> const& other)
  57. {
  58. if (this != &other)
  59. {
  60. clean();
  61. copy(other);
  62. }
  63. return *this;
  64. }
  65.  
  66. template <class T>
  67. void CompleteBinTree<T>::resize()
  68. {
  69. T* helper = new T[capacity];
  70. for (int i = 1; i <= current; i++)
  71. helper[i] = values[i];
  72.  
  73. clean();
  74.  
  75. capacity *= 2;
  76. values = new T[capacity];
  77. for (int i = 1; i <= current; i++)
  78. values[i] = helper[i];
  79. delete[] helper;
  80. }
  81.  
  82. template <class T>
  83. void CompleteBinTree<T>::copy(CompleteBinTree<T> const& other)
  84. {
  85. capacity = other.capacity;
  86. current = other.current;
  87. values = new T[capacity];
  88. for (int i = 1; i <= current; i++)
  89. values[i] = other.values[i];
  90. }
  91.  
  92. template <class T>
  93. void CompleteBinTree<T>::clean()
  94. {
  95. delete[] values;
  96. }
  97.  
  98. template <class T>
  99. void CompleteBinTree<T>::addElement(T const& x)
  100. {
  101. if (current == capacity-1)
  102. resize();
  103. values[current++] = x;
  104. }
  105.  
  106. template <class T>
  107. int CompleteBinTree<T>::leftChildIndex(int index) const
  108. {
  109. if (2*index <= current)
  110. return 2*index;
  111. return -1;
  112. }
  113.  
  114. template <class T>
  115. int CompleteBinTree<T>::rightChildIndex(int index) const
  116. {
  117. if (2*index + 1 <= current)
  118. return 2*index + 1;
  119. return -1;
  120. }
  121.  
  122. template <class T>
  123. bool CompleteBinTree<T>::empty() const
  124. {
  125. return current == 0;
  126. }
  127.  
  128. template <class T>
  129. void CompleteBinTree<T>::create()
  130. {
  131. char c;
  132. do
  133. {
  134. int x;
  135. cout << "Enter element: ";
  136. cin >> x;
  137. addElement(x);
  138. cout << "Next element y/n? ";
  139. cin >> c;
  140. } while (c == 'y');
  141. }
  142.  
  143. template <class T>
  144. void CompleteBinTree<T>::printBFS()
  145. {
  146. for (int i = 0; i < current; i++)
  147. cout << values[i] << " ";
  148. cout << endl;
  149. }
  150.  
  151.  
  152. bool inVector(vector<int> arr, int n, const int element)
  153. {
  154. vector<int>::iterator it = find(arr.begin(), arr.end(), element);
  155. if(it != arr.end())
  156. return true;
  157.  
  158. return false;
  159. }
  160.  
  161. template<class T>
  162. void myerase(vector<T>& vec, int index)
  163. {
  164. for(unsigned i = index+1; i < vec.size()-1; i++)
  165. vec[i-1] = vec[i];
  166. vec.pop_back();
  167. }
  168.  
  169. template<class T>
  170. void fillTree(vector<T> leaves, CompleteBinTree<T>& tree)
  171. {
  172. int size = leaves.size();
  173. vector<int> usedPositions;
  174. for(int i = 0; i < size; i++)
  175. usedPositions.push_back(-1);
  176.  
  177. int i = 0;
  178. srand(time(NULL));
  179. while(i < leaves.size())
  180. {
  181. int position = rand() % leaves.size();
  182. if(!inVector(usedPositions, size, position))
  183. {
  184. usedPositions[i] = position;
  185. i++;
  186. tree.addElement(leaves[position]);
  187. }
  188. }
  189. }
  190.  
  191. int main()
  192. {
  193. vector<int> vec;
  194.  
  195. for(int i = 0; i < 10; i++)
  196. vec.push_back(i);
  197.  
  198. CompleteBinTree<int> tree;
  199. fillTree(vec, tree);
  200.  
  201. tree.printBFS();
  202. return 0;
  203. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement