Advertisement
Guest User

Untitled

a guest
Feb 6th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.07 KB | None | 0 0
  1. /*Napisati funkciju za uređivanje proizvoljnog binarnog stabla celih brojeva u binarno stablo za pretragu
  2. korišćenjem SelectionSort algoritma (uzastopni izbor minimuma), bez korišćenja pomoćnih struktura
  3. podataka. Čvorovi binarnog stabla sadrže samo podatak i pokazivače na potomke.
  4. sa pravljenjem novog stabla - 10 poena
  5. bez pravljenja novog stabla - 20 poena*/
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9.  
  10. #define novo(x) x=(drvo *) malloc (sizeof(drvo))
  11.  
  12. typedef struct drvo
  13. {
  14. int broj;
  15. struct drvo *levi;
  16. struct drvo *desni;
  17. } drvo;
  18.  
  19. void dodaj(drvo **p,int broj)
  20. {
  21. drvo *temp;
  22. novo(temp);
  23. if (!temp)
  24. {
  25. printf("alok");
  26. exit(1);
  27. }
  28. temp->broj=broj;
  29. temp->levi=NULL;
  30. temp->desni=NULL;
  31. drvo *p1=*p;
  32. if (!p1)
  33. {
  34. *p=temp;
  35. return;
  36. }
  37. drvo *p2=NULL;
  38. while(p1)
  39. {
  40. p2=p1;
  41. if (broj>=p1->broj) p1=p1->levi;
  42. else p1=p1->desni;
  43. }
  44. if (p2->broj<=broj) p2->levi=temp; else p2->desni=temp;
  45. }
  46.  
  47.  
  48.  
  49. drvo *formiraj()
  50. {
  51. int n,i,broj;
  52. drvo *p=NULL;
  53. scanf("%d",&n);
  54. for(i=0;i<n;i++)
  55. {
  56. scanf("%d",&broj);
  57. dodaj(&p,broj);
  58. }
  59. return p;
  60. }
  61.  
  62. void ispis(drvo *p)
  63. {
  64. if (p->levi) ispis(p->levi);
  65. printf("%3d",p->broj);
  66. if (p->desni) ispis(p->desni);
  67. }
  68.  
  69. void pronadjimin(drvo *p,drvo **min,drvo **min1)
  70. {
  71. if (!p) return;
  72. drvo *mini=*min;
  73. if (p->levi)
  74. {
  75. if (p->levi->broj<mini->broj)
  76. {
  77. *min=p->levi;
  78. *min1=p;
  79. }
  80. pronadjimin(p->levi,min,min1);
  81. }
  82. if (p->desni)
  83. {
  84. if (p->desni->broj<mini->broj)
  85. {
  86. *min=p->desni;
  87. *min1=p;
  88. }
  89. pronadjimin(p->desni,min,min1);
  90. }
  91. }
  92.  
  93. void ubaci(drvo **p,drvo *temp)
  94. {
  95. temp->levi=NULL;
  96. temp->desni=NULL;
  97. drvo *p1=*p;
  98. if (!p1)
  99. {
  100. *p=temp;
  101. return;
  102. }
  103. drvo *p2=NULL;
  104. while(p1)
  105. {
  106. p2=p1;
  107. if (p1->broj>=temp->broj) p1=p1->levi;
  108. else p1=p1->desni;
  109. }
  110. if (p2->broj>=temp->broj) p2->levi=temp; else p2->desni=temp;
  111. }
  112.  
  113. void izbaci(drvo **p,drvo *min,drvo *min1)
  114. {
  115. drvo *pom;
  116. if ( min->levi && min->desni && min1 )
  117. {
  118. min1->levi=min->levi;
  119. pom=min->desni;
  120. while(pom->desni)
  121. pom=pom->desni;
  122. pom->desni=min->desni;
  123. }
  124. else if (min->levi && min->desni)
  125. {
  126. *p=min->levi;
  127. pom=min->levi;
  128. while(pom->desni)
  129. pom=pom->desni;
  130. pom->desni=min->desni;
  131. }
  132. else if (min->desni && (!min1))
  133. {
  134. *p=min->desni;
  135. }
  136. else if (min->levi && (!min1))
  137. {
  138. *p=min->levi;
  139. }
  140. else if (min->levi && min1)
  141. {
  142. if (min1->levi==min)
  143. {
  144. min1->levi=min->levi;
  145. }
  146. else
  147. {
  148. min1->desni=min->levi;
  149. }
  150. }
  151. else if (min->desni && min1)
  152. {
  153. if (min1->desni==min)
  154. {
  155. min1->desni=min->desni;
  156. }
  157. else
  158. {
  159. min1->levi=min->desni;
  160. }
  161. }
  162. else if ( (! min->desni) && (! min->levi) && (min1))
  163. {
  164. if (min==min1->levi) min1->levi=NULL; else min1->desni=NULL;
  165. }
  166. else *p=NULL;
  167. }
  168.  
  169. main()
  170. {
  171. drvo *p,*min,*min1,*q=NULL;
  172. p=formiraj();
  173. if (p) ispis(p);
  174. while(p)
  175. {
  176. min=p; min1=NULL;
  177. pronadjimin(p,&min,&min1);
  178. izbaci(&p,min,min1);
  179. ubaci(&q,min);
  180. }
  181. ispis(q);
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement