Advertisement
Guest User

Untitled

a guest
Apr 24th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.33 KB | None | 0 0
  1. // ConsoleApplication8.cpp : Defines the entry point for the console application.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include<iostream>
  6. #include<stdlib.h>
  7. #include<stdio.h>
  8. #include<malloc.h>
  9. using namespace std;
  10. using namespace System;
  11. struct arbbin
  12. {
  13. int inf;
  14. arbbin *ss, *sd;
  15. };
  16. arbbin *cnod(int k, arbbin *stg, arbbin *drt)
  17. {
  18. //arbbin *t = new arbbin;//folosim new sau delete
  19. arbbin *t =
  20. t->ss = stg;
  21. t->sd = drt;
  22. t->inf = k;
  23. return t;
  24.  
  25. }
  26. int sterg(arbbin*& pa)
  27. {
  28. if (pa->ss)
  29. return sterg(pa->ss);//se merghe catre cel mai din stanga nod
  30. else
  31. {
  32. arbbin*a = pa;
  33. int k = a->inf;
  34. pa = pa->sd;
  35. free(a);
  36. return k;
  37. }
  38. }
  39. int max(int a, int b)
  40. {
  41. return(a > b) ? a : b;
  42. }
  43. arbbin *insnr(arbbin *rad, int k)
  44. {
  45. if (!rad)
  46. return cnod(k, NULL, NULL);//Arbore vid,noul creat este radacina
  47. else//Arbore nevid
  48. {
  49. arbbin *aux = rad;
  50. while (1)
  51. if (k < rad->inf)//test daca nodul se va insera in subarborele stang
  52. if (rad->ss) rad = rad->ss;//Trecerea in subarborele stang
  53. else//subarbore vid.deci inserare nod si terminare
  54. {
  55. rad->ss = cnod(k, NULL, NULL);
  56. return aux;
  57. }
  58. else if (k > rad->inf)//test daca nodul se va insera in subarborele drept
  59. if (rad->sd)rad = rad->sd;//trecere in subarborele drept
  60. else//subarbore vid,deci inserare nod si terminare
  61. {
  62. rad->sd = cnod(k, NULL, NULL);
  63. return aux;
  64.  
  65. }
  66. else//cazul in care nodul exista deja
  67. {
  68. printf("\n Nod existent");//console writeline
  69. return aux;
  70. }
  71. }
  72. }
  73.  
  74. //recursiv
  75. arbbin *ins(arbbin *rad, int k)
  76. {
  77. if (rad)
  78. {
  79. if (k < rad->inf)rad->ss = ins(rad->ss, k);
  80. else if (k > rad->inf)rad->sd = ins(rad->sd, k);
  81. else cout << "\n Nod inexistent";
  82. return rad;
  83. }
  84. else return cnod(k, NULL, NULL);
  85. }
  86. //Parcurgere radacina stanga-dreapta sau in ordine
  87. void preord(arbbin *rad)
  88. {
  89. if (rad)
  90. {
  91. printf("%5d", rad->inf);
  92. preord(rad->ss);
  93. preord(rad->sd);
  94. }
  95. }
  96. void inord(arbbin *rad)
  97. {
  98. if (rad)
  99. {
  100. inord(rad->ss);
  101. printf("%5d", rad->inf);
  102. inord(rad->sd);
  103.  
  104. }
  105. }
  106. //stergerea unui nod
  107. void stergere_nod(arbbin*& rad, int k)
  108. {
  109. arbbin *aux;
  110. //se cauta nodul de sters
  111. if (!rad) cout << "Nodul nu exista" << k;
  112. else if (k < rad->inf)stergere_nod(rad->ss, k);
  113. else if (k > rad->inf)stergere_nod(rad->sd, k);
  114. else
  115. {//nodul s-a gasit
  116. aux = rad;
  117. //se testeaza daca are 7un descendent vid
  118. if (!aux->sd) {
  119. rad = aux->ss, free(aux);
  120. }
  121. else if (!aux->ss) { rad = aux->sd, free(aux); }
  122. else //nu are nici un descendent vid
  123. rad->inf = sterg(rad->sd);
  124. }
  125. }
  126.  
  127. int nr_noduri(arbbin *rad)
  128. {
  129. if (rad)return 1 + nr_noduri(rad->ss) + nr_noduri(rad->sd);
  130. else return 0;
  131. }
  132. //nr de lv arb
  133. int inaltime(arbbin *rad)
  134. {
  135. if (rad) return 1 + max(inaltime(rad->ss), inaltime(rad->sd));
  136. else return 0;
  137. }
  138.  
  139. //afisarea nodurilor de pe un anumit nivel
  140. void afis_nivel(arbbin *rad, int niv)
  141. {
  142. if (rad)
  143. if (!niv)
  144. cout << rad->inf;
  145. else
  146. {
  147. afis_nivel(rad->ss, niv - 1);
  148. afis_nivel(rad->sd, niv - 1);
  149. }
  150. }
  151. void main()
  152. {
  153. arbbin *arb = NULL;
  154. struct obs x[NOBS] = {
  155. {19500.,29}, {21300.,20},
  156. {30005., 10}, {41240., 2},
  157. {30005., 5}, {27500., 7},
  158. {19500., 11}, {21300.,20}
  159. };
  160. for (int poz = 0; poz < NOBS; poz++)insarb(arb, x[poz].termx[poz].frecv);
  161. putchar("\n");
  162. print(arb);
  163. system("pause");
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement