Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.09 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct wezel{
  6.  
  7. const char *litera;
  8. int counter;
  9. struct wezel *rodzic;
  10. struct wezel *l_syn;
  11. struct wezel *p_syn;
  12.  
  13. } wezel;
  14.  
  15. struct wezel *root = NULL;
  16.  
  17. ////////////////////////////////////////////////////////////////////////
  18.  
  19. void treeInsert(struct wezel *wchodzacy,const char *litera){
  20. //jesli nie ma korzenia
  21. if (root == NULL) {
  22.  
  23. root = (wezel*)malloc(sizeof *root);
  24. root->litera = litera;
  25. root->counter++;
  26. root->l_syn = NULL;
  27. root->p_syn = NULL;
  28. root->rodzic = NULL;
  29.  
  30. }
  31. //jesli wprowadzany jest mniejszy niz ojcec -> idz na lewo
  32. else if (strcmp(litera,wchodzacy->litera) < 0) {
  33.  
  34. if(wchodzacy->l_syn != NULL){
  35.  
  36. treeInsert(wchodzacy->l_syn,litera);
  37.  
  38. }
  39.  
  40. else{
  41.  
  42. wezel *nowy = (wezel*)malloc(sizeof *root);
  43. nowy->litera = litera;
  44. nowy->counter++;
  45. nowy->l_syn = NULL;
  46. nowy->p_syn = NULL;
  47. nowy->rodzic = wchodzacy;
  48. wchodzacy->l_syn = nowy;
  49.  
  50. }
  51.  
  52. }
  53. //wiekszy niz ojciec -> idz w prawo
  54. else if (strcmp(litera,wchodzacy->litera) > 0) {
  55.  
  56. if (wchodzacy->p_syn != NULL) {
  57.  
  58. treeInsert(wchodzacy->p_syn,litera);
  59.  
  60. }
  61.  
  62. else{
  63.  
  64. wezel *nowy = (wezel*)malloc(sizeof *root);
  65. nowy->litera = litera;
  66. nowy->counter++;
  67. nowy->l_syn = NULL;
  68. nowy->p_syn = NULL;
  69. nowy->rodzic = wchodzacy;
  70. wchodzacy->p_syn = nowy;
  71.  
  72. }
  73.  
  74. }
  75. //taki sam
  76. else if(strcmp(litera,wchodzacy->litera) == 0) {
  77.  
  78. wchodzacy->counter++;
  79.  
  80. }
  81.  
  82. }
  83.  
  84. ////////////////////////////////////////////////////////////////////////
  85.  
  86. void drukuj(struct wezel *wchodzacy){
  87.  
  88. if (wchodzacy->l_syn != NULL) {
  89.  
  90. drukuj(wchodzacy->l_syn);
  91.  
  92. }
  93.  
  94. printf("%s %i\n",wchodzacy->litera, wchodzacy->counter);
  95.  
  96. if (wchodzacy->p_syn != NULL) {
  97.  
  98. drukuj(wchodzacy->p_syn);
  99.  
  100. }
  101. }
  102.  
  103. ////////////////////////////////////////////////////////////////////////
  104.  
  105. struct wezel *treeSearch(struct wezel *wchodzacy,const char *litera){
  106.  
  107. if (strcmp(litera,wchodzacy->litera) == 0) {
  108.  
  109. printf("Znalazlem i zwracam wskaznik na: %s\n", wchodzacy->litera);
  110. return wchodzacy;
  111.  
  112. }
  113.  
  114. else if (strcmp(litera,wchodzacy->litera) < 0 && wchodzacy->l_syn != NULL) {
  115.  
  116. return treeSearch(wchodzacy->l_syn,litera);
  117.  
  118. }
  119.  
  120. else if (strcmp(litera,wchodzacy->litera) > 0 && wchodzacy->p_syn != NULL) {
  121.  
  122. return treeSearch(wchodzacy->p_syn,litera);
  123.  
  124. }
  125.  
  126. printf("Nie ma takiego liscia: %s\n", litera);
  127.  
  128. return NULL;
  129. }
  130.  
  131. ////////////////////////////////////////////////////////////////////////
  132.  
  133. struct wezel* maxLewy(struct wezel *wchodzacy){
  134.  
  135. if(wchodzacy->l_syn != NULL)
  136. return maxLewy(wchodzacy->l_syn);
  137.  
  138. else
  139. return wchodzacy;
  140.  
  141. }
  142.  
  143. ////////////////////////////////////////////////////////////////////////
  144.  
  145. void Delete(struct wezel *wchodzacy){
  146.  
  147. if(wchodzacy->l_syn==NULL && wchodzacy->p_syn==NULL){
  148.  
  149. if(wchodzacy->rodzic==NULL){
  150.  
  151. if ( wchodzacy->counter > 1 ) wchodzacy->counter--;
  152. else root=NULL;
  153.  
  154. }
  155. else if(wchodzacy->rodzic->l_syn==wchodzacy){
  156.  
  157. if ( wchodzacy->counter > 1 ) wchodzacy->counter--;
  158. else wchodzacy->rodzic->l_syn=NULL;
  159.  
  160. }
  161.  
  162. else{
  163.  
  164. if ( wchodzacy->counter > 1 ) wchodzacy->counter--;
  165. else wchodzacy->rodzic->p_syn=NULL;
  166.  
  167. }
  168. }
  169.  
  170. else if(wchodzacy->l_syn==NULL || wchodzacy->p_syn==NULL){
  171.  
  172. if(wchodzacy->l_syn==NULL){
  173.  
  174. if(wchodzacy->rodzic==NULL){
  175.  
  176. if ( wchodzacy->counter > 1 ) wchodzacy->counter--;
  177.  
  178. else root=wchodzacy->p_syn;
  179.  
  180. }
  181.  
  182. else if(wchodzacy->rodzic->l_syn==wchodzacy){
  183.  
  184. if ( wchodzacy->counter > 1 ) wchodzacy->counter--;
  185.  
  186. else wchodzacy->rodzic->l_syn=wchodzacy->p_syn;
  187.  
  188. }
  189.  
  190. else{
  191.  
  192. if ( wchodzacy->counter > 1 ) wchodzacy->counter--;
  193.  
  194. else wchodzacy->rodzic->p_syn=wchodzacy->p_syn;
  195.  
  196. }
  197. }
  198.  
  199. else{
  200.  
  201. if(wchodzacy->rodzic==NULL){
  202.  
  203. if ( wchodzacy->counter > 1 ) wchodzacy->counter--;
  204.  
  205. else root=wchodzacy->l_syn;
  206. }
  207.  
  208. else if(wchodzacy->rodzic->l_syn==wchodzacy){
  209.  
  210. if ( wchodzacy->counter > 1 ) wchodzacy->counter--;
  211.  
  212. else wchodzacy->rodzic->l_syn=wchodzacy->l_syn;
  213.  
  214. }
  215.  
  216. else{
  217.  
  218. if ( wchodzacy->counter > 1 ) wchodzacy->counter--;
  219.  
  220. else wchodzacy->rodzic->p_syn=wchodzacy->l_syn;
  221.  
  222. }
  223. }
  224. }
  225.  
  226. else{
  227.  
  228. struct wezel *temp;
  229. temp=maxLewy(wchodzacy->p_syn);
  230. wchodzacy->litera = temp->litera;
  231. Delete(temp);
  232. }
  233. }
  234.  
  235. ////////////////////////////////////////////////////////////////////////
  236.  
  237. int main() {
  238.  
  239. treeInsert(root,"m");
  240. treeInsert(root,"b");
  241. treeInsert(root,"k");
  242. treeInsert(root,"l");
  243. treeInsert(root,"m");//podwojne
  244. drukuj(root);
  245. treeSearch(root,"m");//jest
  246. treeSearch(root,"a");//nie ma
  247. Delete(treeSearch(root,"k"));
  248. Delete(treeSearch(root,"m"));
  249. Delete(treeSearch(root,"m"));
  250. treeInsert(root,"k");
  251. treeInsert(root,"m");//podwojne
  252. treeInsert(root,"l");
  253. treeInsert(root,"b");
  254. drukuj(root);
  255.  
  256.  
  257.  
  258.  
  259. return 0;
  260. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement