Advertisement
ElooEminem

Untitled

Nov 28th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.54 KB | None | 0 0
  1. #include <iostream>
  2. #include <sstream>
  3. #include <conio.h>
  4. #include <vector.h>
  5.  
  6. using namespace std;
  7.  
  8. class Node{
  9. public:
  10. int key;
  11. char *key_char;
  12. Node *left;
  13. Node *right;
  14. Node(int key){
  15. key_char=new char[10];
  16. this->key=key;
  17. this->left=NULL;
  18. this->right=NULL;
  19. stringstream tmp;
  20. tmp<<key;
  21. tmp>>this->key_char;
  22. }
  23. ~Node(){
  24. delete [] this->key_char;
  25. }
  26. };
  27.  
  28. class Tree_BST{
  29. public:
  30. Node *root;
  31. Tree_BST(){
  32. this->root=NULL;
  33. }
  34.  
  35. bool Insert(int key){
  36. if(!this->root){ //Drzewo puste
  37. this->root=new Node(key);
  38. return true;
  39. }
  40. else{ //Drzewo nipuste
  41. Node *it=this->root;
  42. while(true){
  43. if(key < it->key)
  44. if(it->left)
  45. it=it->left; //Juz istnieje it->left, idziemy w lewo
  46. else{
  47. it->left=new Node(key); //Dodanie Node z key jako it->left
  48. return true;
  49. }
  50. else if(key > it->key)
  51. if(it->right)
  52. it=it->right; //Juz istnieje it->right, idziemy w prawo
  53. else{
  54. it->right=new Node(key); //Dodanie Node z key jako it->right
  55. return true;
  56. }
  57. else
  58. return false; //Klucz key juz istnieje
  59. }
  60. }
  61. }
  62.  
  63. void Insert_multiple(int n){
  64. for(int i=0;i<n;i++)
  65. this->Insert( rand()%90001 + 9999 );
  66. }
  67.  
  68. void DFS_preorder(){
  69. int n=0;
  70. this->DFS_preorder_rec(this->root,&n);
  71. cout<<"\nPrzeszukano "<<n<<" elementow.";
  72. return;
  73. }
  74.  
  75. void DFS_inorder(){
  76. int n=0;
  77. this->DFS_inorder_rec(this->root,&n);
  78. cout<<"\nPrzeszukano "<<n<<" elementow.";
  79. return;
  80. }
  81.  
  82. void DFS_postorder(){
  83. int n=0;
  84. this->DFS_postorder_rec(this->root,&n);
  85. cout<<"\nPrzeszukano "<<n<<" elementow.";
  86. return;
  87. }
  88.  
  89. vector < Node* > Find(Node *it,int key){
  90. vector < Node* > stack;
  91. if(!this->root)
  92. return stack;
  93. if(this->root->key==key)
  94. return stack;
  95. while(true){
  96. if (! stack.size() ){ //Prawda <=> it jest korzeniem
  97. stack.push_back(it);
  98. }
  99. }
  100. return stack;
  101. }
  102.  
  103. bool Delete(int key){
  104.  
  105. }
  106.  
  107. ~Tree_BST(){
  108. this->Delete_whole();
  109. }
  110.  
  111. void Delete_whole(){
  112. this->Delete_whole_rec(this->root);
  113. this->root=NULL;
  114. }
  115.  
  116. private:
  117. void Delete_whole_rec(Node *it){
  118. if(it){
  119. if(it->left)
  120. Delete_whole_rec(it->left);
  121. if(it->right)
  122. Delete_whole_rec(it->right);
  123. delete it;
  124. }
  125. return;
  126. }
  127.  
  128. void DFS_preorder_rec(Node *it,int *n){
  129. if(it){
  130. *n+=1;
  131. cout<<endl<<it->key;
  132. if(it->left)
  133. DFS_preorder_rec(it->left,n);
  134. if(it->right){
  135. DFS_preorder_rec(it->right,n);
  136. }
  137. }
  138. return;
  139. }
  140.  
  141. void DFS_inorder_rec(Node *it,int *n){
  142. if(it){
  143. if(it->left)
  144. DFS_inorder_rec(it->left,n);
  145. *n+=1;
  146. cout<<endl<<it->key;
  147. if(it->right)
  148. DFS_inorder_rec(it->right,n);
  149. }
  150. }
  151.  
  152. void DFS_postorder_rec(Node *it,int *n){
  153. if(it){
  154. if(it->left)
  155. DFS_inorder_rec(it->left,n);
  156. if(it->right)
  157. DFS_inorder_rec(it->right,n);
  158. *n+=1;
  159. cout<<endl<<it->key;
  160. }
  161. }
  162. };
  163.  
  164. int main(){
  165. Tree_BST *Tree=new Tree_BST();
  166.  
  167. Tree->Insert(3);
  168. Tree->Insert(5);
  169. Tree->Insert(-10);
  170. Tree->Insert(17);
  171.  
  172. Tree->Delete_whole();
  173.  
  174. Tree->Insert(1);
  175. Tree->Insert(0);
  176. Tree->Insert(2);
  177. Tree->Insert(-1);
  178.  
  179. Tree->DFS_inorder();
  180.  
  181. getche();
  182. return 0;
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement