Advertisement
Alchemik96

AISD DREZEWA LEGIT

Apr 26th, 2017
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.65 KB | None | 0 0
  1. #include <conio.h>
  2. #include <malloc.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <time.h>
  6.  
  7. struct ElementDrzewa
  8. {
  9. double Liczba;
  10. ElementDrzewa *Lewo, *Prawo;
  11. };
  12.  
  13.  
  14. ElementDrzewa * NowyElementDrzewa(double x)
  15. {
  16. ElementDrzewa * Nowy = (struct ElementDrzewa*) malloc(sizeof(struct ElementDrzewa));
  17. Nowy->Liczba = x;
  18. Nowy->Lewo = Nowy->Prawo = 0;
  19. return Nowy;
  20. }
  21.  
  22. void ZwolnijDrzewo(struct ElementDrzewa * Korzen)
  23. {
  24. if(Korzen->Lewo)
  25. {
  26. if(Korzen->Lewo->Lewo==0 && Korzen->Lewo->Prawo==0)
  27. {
  28. ZwolnijDrzewo(Korzen->Lewo);
  29. }
  30. else
  31. {
  32. delete Korzen->Lewo;
  33. };
  34. }
  35. if(Korzen->Prawo)
  36. {
  37. if(Korzen->Prawo->Lewo==0 && Korzen->Prawo->Prawo==0)
  38. {
  39. ZwolnijDrzewo(Korzen->Prawo);
  40. }
  41. else
  42. {
  43. delete Korzen->Prawo;
  44. };
  45. }
  46. if(Korzen->Lewo==0 && Korzen->Prawo==0) delete Korzen;
  47. }
  48.  
  49. void WstawElementDrzewa(struct ElementDrzewa *Korzen, double Liczba)
  50. {
  51. if(Liczba < Korzen->Liczba)
  52. {
  53. if(Korzen->Lewo)
  54. {
  55. WstawElementDrzewa(Korzen->Lewo, Liczba);
  56. }
  57.  
  58. else
  59. {
  60. Korzen->Lewo = NowyElementDrzewa(Liczba);
  61. }
  62. }
  63.  
  64. if(Liczba > Korzen->Liczba)
  65. {
  66. if(Korzen->Prawo)
  67. {
  68. WstawElementDrzewa(Korzen->Prawo, Liczba);
  69. }
  70.  
  71. else
  72. {
  73. Korzen->Prawo = NowyElementDrzewa(Liczba);
  74. }
  75. }
  76.  
  77. }
  78.  
  79. ElementDrzewa * WczytajDrzewo(char * NazwaPliku)
  80. {
  81. FILE * f;
  82. double Liczba;
  83. unsigned int i, Liczbaliczb;
  84. struct ElementDrzewa *Drzewo =0;
  85. if((f=fopen(NazwaPliku, "r")) != 0)
  86. {
  87. fscanf(f,"%u", &Liczbaliczb);
  88. fscanf(f,"%lf", &Liczba);
  89. Drzewo = NowyElementDrzewa(Liczba);
  90. for(i=1; i<Liczbaliczb; ++i)
  91. {
  92. fscanf(f, "%lf", &Liczba);
  93. WstawElementDrzewa(Drzewo, Liczba);
  94. }
  95. fclose(f);
  96. } else printf("BLAD W TRAKCIE OTWIERANIA PLIKU !");
  97. return Drzewo;
  98.  
  99. }
  100.  
  101. unsigned int GlebokoscDrzewa(struct ElementDrzewa * Korzen)
  102. {
  103. unsigned int ile1, ile2;
  104.  
  105. if( Korzen->Prawo == NULL)
  106. {
  107. ile1 = 0;
  108. }
  109.  
  110. else
  111. {
  112. ile1 = GlebokoscDrzewa(Korzen->Prawo);
  113. }
  114.  
  115. if(Korzen->Lewo == NULL)
  116. {
  117. ile2 = 0;
  118. }
  119. else
  120. {
  121. ile2 = GlebokoscDrzewa(Korzen->Lewo);
  122. }
  123.  
  124. if(ile1 > ile2){
  125. return ++ile1;}
  126. else
  127. return ++ile2;
  128. };
  129.  
  130. int main()
  131. {
  132. srand(time(NULL));
  133. double tablica[5000];
  134. for(int i=0; i<2500 ;i++) tablica[i] = rand()%5000;
  135. for(int i=2500;i<5000;i++) tablica[i] = rand()%5000-5000;
  136. FILE * plik;
  137. plik = fopen("06.txt", "w");
  138. int x=5000;
  139. fprintf(plik, "%d\n", x);
  140. for(int i=0; i<5000; i++)
  141. {
  142. fprintf(plik, "%lf\n", tablica[i]);
  143. }
  144. fclose(plik);
  145.  
  146. struct ElementDrzewa * Drzewo;
  147. Drzewo = WczytajDrzewo("06.txt");
  148. printf("Najwieksza glebokosc drzewa: %u\n", GlebokoscDrzewa(Drzewo));
  149. ZwolnijDrzewo(Drzewo);
  150. _getch();
  151. return 0;
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement