Guest User

Untitled

a guest
Nov 20th, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.73 KB | None | 0 0
  1. class Node{
  2. public:
  3. shared_ptr<Node> right;
  4. shared_ptr<Node> left;
  5. int number;
  6. Node(int number)
  7. {
  8. this->number=number;
  9. right=nullptr;
  10. left=nullptr;
  11. }
  12. ~Node()
  13. {
  14. cout<<"Deleted"<<" "<<number<<endl;
  15. }
  16. };
  17. class BT
  18. {
  19. public:
  20. shared_ptr<Node> root;
  21. int deep;
  22. BT(int num)
  23. {
  24. deep=0;
  25. root=make_shared<Node>(num);
  26. }
  27.  
  28. void add_number(int num)
  29. {
  30. shared_ptr<Node> new_num=make_shared<Node>(num);
  31. shared_ptr<Node> tmp=root;
  32. int tmp_deep=0;
  33. while(tmp!=nullptr)
  34. {
  35. tmp_deep++;
  36.  
  37. if(tmp->number>num)
  38. {
  39. if (tmp->left==nullptr)
  40. {
  41. tmp->left=new_num;
  42. break;
  43. }
  44.  
  45. else
  46. tmp=tmp->left;
  47. }
  48.  
  49. else if (tmp->number<num)
  50. {
  51. if (tmp->right==nullptr)
  52. {
  53. tmp->right=new_num;
  54. break;
  55. }
  56. else
  57. tmp=tmp->right;
  58. }
  59.  
  60.  
  61. }
  62. tmp.reset();
  63. if (tmp_deep>deep)
  64. deep=tmp_deep;
  65.  
  66. }
  67.  
  68. shared_ptr<Node> find_node(int num)
  69. {
  70. shared_ptr<Node> tmp=root;
  71.  
  72. while (tmp!=nullptr && tmp->number!=num)
  73. {
  74. if (tmp->number>num)
  75. tmp=tmp->left;
  76. else if (tmp->number<num)
  77. tmp=tmp->right;
  78.  
  79. }
  80.  
  81. if (tmp==nullptr)
  82. {
  83. cout<<"Not found";
  84. return nullptr;
  85. }
  86. else
  87. return tmp;
  88.  
  89. }
  90.  
  91. void delete_ (int num)
  92. {
  93. shared_ptr<Node> tmp=root;
  94. shared_ptr<Node> previous=root;
  95.  
  96.  
  97. while (tmp!=nullptr && tmp->number!=num)
  98. {
  99. if (tmp->number>num)
  100. {
  101. previous=tmp;
  102. tmp=tmp->left;
  103.  
  104. }
  105.  
  106. else if (tmp->number<num)
  107. {
  108. previous=tmp;
  109. tmp=tmp->right;
  110. }
  111.  
  112.  
  113. }
  114.  
  115. if (tmp==nullptr)
  116. {
  117. cout<<"Not found";
  118. }
  119. else
  120. {
  121.  
  122. if(tmp->left==nullptr && tmp->right==nullptr)
  123. {
  124.  
  125. if (previous->number>tmp->number)
  126. previous->left=nullptr;
  127. else
  128. previous->right=nullptr;
  129.  
  130.  
  131. tmp.reset();
  132. }
  133. else if (tmp->left==nullptr && tmp->right!=nullptr)
  134. {
  135. if(tmp->right!=nullptr)
  136. {
  137. previous->right=tmp->right;
  138. }
  139. else
  140. previous->right=tmp->left;
  141. tmp.reset();
  142. }
  143. else if (tmp->left!=nullptr && tmp->right==nullptr)
  144. {
  145. if(tmp->right!=nullptr)
  146. {
  147. previous->left=tmp->right;
  148. }
  149. else
  150. previous->left=tmp->left;
  151. tmp.reset();
  152. }
  153. else if (tmp->left!=nullptr && tmp->right!=nullptr)
  154. {
  155.  
  156. shared_ptr<Node> tmp_left=tmp->right;
  157. shared_ptr<Node> prev_left=tmp->right;
  158. while (tmp_left->left!=nullptr)
  159. {
  160.  
  161. //prev_left=tmp_left;
  162. tmp_left=tmp_left->left;
  163.  
  164.  
  165. }
  166. if (tmp->number<previous->number)
  167. previous->left=tmp_left;
  168. else
  169. previous->right=tmp_left;
  170.  
  171. prev_left->left=tmp_left->right;
  172. tmp_left->left=tmp->left;
  173. tmp_left->right=tmp->right;
  174. tmp.reset();
  175.  
  176. }
  177.  
  178.  
  179.  
  180.  
  181. }
  182.  
  183. void show_bt()
  184. {
  185.  
  186. }
  187. void calc_depth()
  188. {
  189.  
  190. }
  191.  
  192. }
  193.  
  194.  
  195.  
  196.  
  197. };
Add Comment
Please, Sign In to add comment