Guest User

Untitled

a guest
Jan 23rd, 2018
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.33 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <conio.h>
  3. #include <stdio.h>
  4. #include <graphics.h>
  5. #include <ctype.h>
  6. #include <dos.h>
  7.  
  8. #define raza 15
  9.  
  10. typedef struct nod
  11. {
  12. int cheie;
  13. struct nod *st,*dr;
  14. }Tnod;
  15. typedef Tnod *ref;
  16.  
  17. ref radacina,q;
  18. int N,x;
  19. char op;
  20. int timp=1000;
  21.  
  22. void Tip(ref anod, int nivel, int x1, int x2, int c1,int c2,char *s)
  23. {
  24. setcolor(WHITE);
  25. settextstyle(SMALL_FONT, HORIZ_DIR,0.5);
  26. line((x1+x2)/2,40*nivel+raza,c1,c2);
  27. pieslice((x1+x2)/2,40*nivel+raza,0,360,raza);
  28. setcolor(BLACK);
  29. sprintf(s,"%d",anod->cheie);
  30. outtextxy((x1+x2)/2,40*nivel+raza,s);
  31. delay(timp);
  32. }/*Tip*/
  33. void Inordine(ref rad, int nivel, int x1, int x2, int c1, int c2)
  34. {
  35. static char s[10];
  36. if(rad!=NULL)
  37. {
  38. Inordine(rad->st,nivel+1,x1,(x1+x2)/2,(x1+x2)/2,nivel*40+raza);
  39. Tip(rad,nivel,x1,x2,c1,c2,s);
  40. Inordine(rad->dr,nivel+1,(x1+x2)/2,x2,(x1+x2)/2,nivel*40+raza);
  41. }
  42. }/*Inordine*/
  43. void Preordine(ref rad, int nivel, int x1, int x2, int c1, int c2)
  44. {
  45. static char s[10];
  46. if (rad!=NULL)
  47. {
  48. Tip(rad,nivel,x1,x2,c1,c2,s);
  49. Preordine(rad->st,nivel+1,x1,(x1+x2)/2,(x1+x2)/2,nivel*40+raza);
  50. Preordine(rad->dr,nivel+1,(x1+x2)/2,x2,(x1+x2)/2,nivel*40+raza);
  51. }
  52. }/*Preordine*/
  53. void Postordine(ref rad, int nivel, int x1, int x2, int c1, int c2)
  54. {
  55. static char s[10];
  56. if (rad!=NULL)
  57. {
  58. Postordine(rad->st,nivel+1,x1,(x1+x2)/2,(x1+x2)/2,nivel*40+raza);
  59. Postordine(rad->dr,nivel+1,(x1+x2)/2,x2,(x1+x2)/2,nivel*40+raza);
  60. Tip(rad,nivel,x1,x2,c1,c2,s);
  61. }
  62. }/*Postordine*/
  63. void Initializare(void)
  64. {
  65. int graphdriver=DETECT,grafmode,errorcode;
  66. initgraph(&graphdriver, &grafmode, "C:\\BorlandC\\BGI");
  67. errorcode = graphresult();
  68. if (errorcode != grOk)
  69. {
  70. printf("Eroare la initializarea modului grafic:%s\n", grapherrormsg(errorcode));
  71. getch();
  72. exit(1);
  73. }
  74. }/*Initializare*/
  75. void InArbore(int x, ref *t)
  76. {
  77. if(*t==NULL)
  78. {
  79. *t=(ref)malloc(sizeof(Tnod));
  80. (*t)->cheie=x;
  81. (*t)->st=NULL;
  82. (*t)->dr=NULL;
  83. }
  84. else
  85. if(x<(*t)->cheie)
  86. InArbore(x,&((*t)->st));
  87. else InArbore(x,&((*t)->dr));
  88. } /*InArbore*/
  89. void Creare(void)
  90. {
  91. char c;
  92. radacina=NULL;
  93. printf("Doriti sa introduceti un nou nod? (d/n):");
  94. fflush(stdin); scanf("%c",&c); c=toupper(c);
  95. while (c=='D')
  96. {
  97. printf("Introduceti informatia: "); scanf("%d",&x);
  98. InArbore(x,&radacina);
  99. printf("Mai introduceti noduri? (d/n): ");
  100. fflush(stdin); scanf("%c",&c); c=toupper(c);
  101. }
  102. } /*Creare*/
  103. void Suprimafd(ref *r)
  104. {
  105. if((*r)->dr!=NULL)
  106. Suprimafd(&((*r)->dr));
  107. else
  108. {
  109. q->cheie=(*r)->cheie;
  110. q=*r;
  111. *r=q->st;
  112. }
  113. }
  114. void Suprimare(int x,ref *p)
  115. {
  116. if((*p)==NULL)
  117. printf("Nodul nu se afla in arbore!\n");
  118. else
  119. if(x<(*p)->cheie)
  120. Suprimare(x,&((*p)->st));
  121. else
  122. if(x>(*p)->cheie)
  123. Suprimare(x,&((*p)->dr));
  124. else
  125. {
  126. q=*p;
  127. if(q->dr==NULL)
  128. (*p)=q->st;
  129. else
  130. if(q->st==NULL)
  131. (*p)=q->dr;
  132. else Suprimafd(&((*p)->st));
  133. free(q);
  134. }
  135. }
  136. void main(void)
  137. {
  138. char c;
  139. clrscr();
  140. radacina=NULL;
  141. do{
  142. clrscr();
  143. printf("\nCrearea si vizualizarea naturala a unui arbore binar si ordonat:");
  144. printf("\nC - Creare");
  145. printf("\nP - Preordine ");
  146. printf("\nI - Inordine ");
  147. printf("\nS - Postordine");
  148. printf("\nD - Suprimare nod");
  149. printf("\nE - Iesire");
  150. printf("\nIntrodu optiunea: ");
  151. fflush(stdin); scanf("%c",&op); op=toupper(op);
  152. switch (op)
  153. {
  154. case 'C':if(radacina==NULL)
  155. Creare();
  156. else
  157. {
  158. printf("Arborele exista! Doriti sa creati un alt arbore? (d/n)");
  159. fflush(stdin); scanf("%c",&c);c=toupper(c);
  160. if(c=='D')
  161. {
  162. radacina=NULL;
  163. Creare();
  164. }
  165. }
  166. break;
  167. case 'P':if(radacina==NULL)
  168. printf("Arborele este vid!\n");
  169. else
  170. {
  171. printf("Arborele perfect echilibrat in Inordine simetrica: \n");
  172. Initializare();
  173. delay(timp);
  174. Preordine(radacina,0,0,getmaxx(),getmaxx()/2,raza);
  175. getch();
  176. closegraph();
  177. }
  178. break;
  179. case 'I':if(radacina==NULL)
  180. printf("Arborele este vid!\n");
  181. else
  182. {
  183. printf("Arborele perfect echilibrat in Inordine simetrica: \n");
  184. Initializare();
  185. delay(timp);
  186. Inordine(radacina,0,0,getmaxx(),getmaxx()/2,raza);
  187. getch();
  188. closegraph();
  189. }
  190. break;
  191. case 'D':if(radacina==NULL)
  192. printf("Arborele este vid!\n");
  193. else
  194. {
  195. printf("Dati cheia:");scanf("%d",&x);
  196. Suprimare(x,&radacina);
  197. }
  198. break;
  199. case 'S':if(radacina==NULL)
  200. printf("Arborele este vid!\n");
  201. else
  202. {
  203. printf("Arborele perfect echilibrat in Inordine simetrica: \n");
  204. Initializare();
  205. delay(timp);
  206. Postordine(radacina,0,0,getmaxx(),getmaxx()/2,raza);
  207. getch();
  208. closegraph();
  209. }
  210. break;
  211. case 'E':break;
  212. } /*switch*/
  213. }while(op!='E');
  214. }/*main*/
Add Comment
Please, Sign In to add comment