Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.99 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <malloc.h>
  4.  
  5.  
  6. struct arbore {
  7. int k;
  8. struct arbore *ss,*sd;
  9. };
  10.  
  11.  
  12. struct arbore *init_arbore_binar()
  13. {
  14. struct arbore *aux;
  15. char nn,c1;
  16. int k;
  17.  
  18. printf(" e nod NULL ? ");
  19. scanf("%c",&nn);
  20. c1=getchar();
  21. if ((nn== 'n')||(nn== 'N'))
  22. {
  23. printf(" cheie : ");
  24. scanf("%d",&k);
  25. c1=getchar();
  26. aux=(struct arbore *) malloc(sizeof(struct arbore));
  27. aux->k=k;
  28. printf("Fiul stang al lui %d",k);
  29. aux->ss=init_arbore_binar();
  30. printf("Fiul drept al lui %d",k);
  31. aux->sd=init_arbore_binar();
  32. return aux;
  33. }
  34. else
  35. return NULL;
  36. }
  37.  
  38. void RSD( struct arbore *a)
  39. {
  40. if(a)
  41. {
  42. printf("%d ",a->k);
  43. RSD(a->ss);
  44. RSD(a->sd);
  45. }
  46. }
  47.  
  48. void SRD( struct arbore *a)
  49. {
  50. if(a)
  51. {
  52. SRD(a->ss);
  53. printf("%d ",a->k);
  54. SRD(a->sd);
  55. }
  56. }
  57.  
  58. // 10. Sa se caute o cheie in arborele binar;
  59. int cautare_cheie_in_arborele_binar(struct arbore *a, int key){
  60. static int valid_boolean = 0;
  61. if(a){
  62. if(a->k == key){
  63. valid_boolean = 1;
  64. }
  65. cautare_cheie_in_arborele_binar(a->ss, key);
  66. cautare_cheie_in_arborele_binar(a->sd, key);
  67. return valid_boolean;
  68. }
  69. }
  70.  
  71. //11. Sa se afiseze elementele aflate in intervalul [a,b];
  72.  
  73. void afisare_elemente_interval(struct arbore *a, int cap, int coada){
  74. if(a){
  75. if(a->k >= cap && a->k <=coada){
  76. printf("%d ", a->k);
  77. }
  78. afisare_elemente_interval(a->ss, cap, coada);
  79. afisare_elemente_interval(a->sd, cap, coada);
  80. }
  81. }
  82.  
  83. //18. Sa se determine numarul de noduri 0, 1, respectiv 2 fii dintr-un arbore binar;
  84.  
  85. int noduri_cu_0_fii(struct arbore *a){
  86. int static noduri_cu_0_fii_var = 0;
  87. if(a){
  88. if(!a->ss && !a->sd){
  89. noduri_cu_0_fii_var++;
  90. }
  91. noduri_cu_0_fii(a->ss);
  92. noduri_cu_0_fii(a->sd);
  93. return noduri_cu_0_fii_var;
  94. }
  95. }
  96.  
  97. int noduri_cu_1_fii(struct arbore *a){
  98. int static noduri_cu_1_fiu_var = 0;
  99. if(a){
  100. if((!a->ss && a->sd) || (a->ss && !a->sd)){
  101. noduri_cu_1_fiu_var++;
  102. }
  103. noduri_cu_1_fii(a->ss);
  104. noduri_cu_1_fii(a->sd);
  105. return noduri_cu_1_fiu_var;
  106. }
  107. }
  108.  
  109. int noduri_cu_2_fii(struct arbore *a){
  110. int static noduri_cu_2_fii_var = 0;
  111. if(a){
  112. if(a->ss && a->sd){
  113. noduri_cu_2_fii_var++;
  114. }
  115. noduri_cu_2_fii(a->ss);
  116. noduri_cu_2_fii(a->sd);
  117. return noduri_cu_2_fii_var;
  118. }
  119. }
  120.  
  121. int max(int a, int b){
  122. return a>b?a:b;
  123. }
  124.  
  125. int afisare_nivel_arbore(struct arbore *a){
  126. int static inaltime = 0;
  127. if(a){
  128. return 1+max(afisare_nivel_arbore(a->ss), afisare_nivel_arbore(a->sd));
  129. }else{
  130. return 0;
  131. }
  132. }
  133.  
  134. //Aflare arbore echilibrat
  135. int arbore_echilibrat(struct arbore *a){
  136. int static arbore_echilibrat_var = 0;
  137. if(a){
  138. if(afisare_nivel_arbore(a->ss) == afisare_nivel_arbore(a->sd)){
  139. arbore_echilibrat(a->ss);
  140. arbore_echilibrat(a->sd);
  141. arbore_echilibrat_var = 1;
  142. arbore_echilibrat_var;
  143. }else{
  144. arbore_echilibrat_var = 0;
  145. return arbore_echilibrat_var;
  146. }
  147. }
  148. }
  149.  
  150.  
  151. int main()
  152. {
  153. struct arbore *a;
  154.  
  155. printf("Radacina");
  156. a=init_arbore_binar();
  157. printf("Parcurgerea RSD : ");
  158. RSD(a);
  159. // printf("\n\n\n\n\n %d", cautare_cheie_in_arborele_binar(a, 2));
  160. printf("\n\n\n\n\n");
  161. //afisare_elemente_interval(a, 6, 8);
  162.  
  163.  
  164. //Afisare fii arborelui
  165. //printf("Noduri cu 0 fii: %d\n", noduri_cu_0_fii(a));
  166. //printf("Noduri cu 1 fiu: %d\n", noduri_cu_1_fii(a));
  167. //printf("Noduri cu 2 fii: %d\n", noduri_cu_2_fii(a));
  168. // printf("%d", afisare_nivel_arbore(a));
  169. printf("%d", arbore_echilibrat(a));
  170. return 0;
  171. }
  172.  
  173.  
  174. // n 3 n 4 d d n 7 n 5 d d n 2 n 1 d n 8 d d d
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement