Advertisement
Guest User

ESTRUCTURA ARBOLES

a guest
Jun 8th, 2018
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.73 KB | None | 0 0
  1. MAIN:
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include "header.h"
  6. int main()
  7. {
  8. int opcion, orden_opc, aux;
  9. P_NODO_ARBOL a = NULL;
  10.  
  11. do
  12. {
  13. printf("\n\n1.Insertar\n");
  14. printf("2.Encontrar\n");
  15. printf("3.Salir\n");
  16. printf("\nIntroduce una opcion: ");
  17. scanf("%d",&opcion);
  18.  
  19. switch (opcion)
  20. {
  21. case 1:
  22. printf("\nTelefono a insertar: ");
  23. scanf("%d",&aux);
  24. a = insertar(a, aux);
  25. printf("\nTelefono insertado");
  26. /* printf("\nNombre a insertar: ");
  27. scanf("%d",&aux2);
  28. a = insertar(a, aux2);
  29. printf("\nNombre insertado");
  30. */break;
  31.  
  32. case 2:
  33. printf("\nNumero a encontrar: ");
  34. scanf("%d",&aux);
  35. if(encontrar(a, aux) != NULL)
  36. {
  37. printf("\nNumero de telefono: %d", encontrar(a, aux)->valor);
  38. //printf("\nNombre insertado: %d", encontrar(a, aux2)->nombre);
  39. }
  40. else
  41. {
  42. printf("\nNo encontrado");
  43. }
  44. break;
  45.  
  46.  
  47. }
  48.  
  49. }
  50. while (opcion != 7);
  51.  
  52. system("pause");
  53. return 0;
  54. }
  55.  
  56.  
  57.  
  58. HEADER.H:
  59.  
  60. #ifndef HEADER_H_INCLUDED
  61. #define HEADER_H_INCLUDED
  62.  
  63. #include <stdio.h>
  64. #include <stdlib.h>
  65.  
  66. typedef struct nodo_arbol
  67. {
  68. int valor; /* Campo donde almacenaremos el valor */
  69. char nombre[255];
  70. struct nodo_arbol *izq; /* Puntero al hijo izquierdo */
  71. struct nodo_arbol *der; /* Puntero al hijo derecho */
  72. }NODO_ARBOL, *P_NODO_ARBOL;
  73.  
  74.  
  75. P_NODO_ARBOL crearArbol();
  76. int esVacio(P_NODO_ARBOL a);
  77. P_NODO_ARBOL insertar(P_NODO_ARBOL arbol, int i);
  78. P_NODO_ARBOL encontrar (P_NODO_ARBOL arbol, int i);
  79. void preOrder(P_NODO_ARBOL a);
  80. void postOrder(P_NODO_ARBOL a);
  81. void inOrder(P_NODO_ARBOL a);
  82.  
  83.  
  84. #endif // HEADER_H_INCLUDED
  85.  
  86.  
  87.  
  88. FUNCIONES.C:
  89.  
  90. #include "header.h"
  91. /** Crea un arbol vacio*/
  92. P_NODO_ARBOL crearArbol()
  93. {
  94. return NULL;
  95. }
  96. /** Devuelve 1 si el arbol esta vacio*/
  97. int esVacio(P_NODO_ARBOL a)
  98. {
  99. return (a==NULL);
  100. }
  101.  
  102. P_NODO_ARBOL alojar_nodo_arbol()
  103. {
  104. return((P_NODO_ARBOL)malloc(sizeof(NODO_ARBOL))); /* Reservamos memoria */
  105. }
  106.  
  107.  
  108. P_NODO_ARBOL encontrar (P_NODO_ARBOL arbol, int i)
  109. /* Devuelve un apuntador al nodo del arbol "arbol" cuyo contenido es "i", o
  110. NULL en caso de que no se encuentre este valor */
  111. {
  112. if (arbol == NULL) /* Arbol vacÌo por tanto devuelve NULL */
  113. return (NULL);
  114.  
  115. if (arbol->valor == i) /* Hemos encontrado el valor */
  116. return (arbol);
  117. else if (arbol->valor > i) /* El valor actual es mayor que ir por tanto
  118. vamos hacia la izquierda */
  119. return(encontrar(arbol->izq, i));
  120. else /* "i" es mayor que el valor actual */
  121. return(encontrar(arbol->der, i));
  122. }
  123.  
  124.  
  125.  
  126. P_NODO_ARBOL insertar(P_NODO_ARBOL arbol, int i)
  127. /* Inserta el valor "i" en el ·rbol apuntado por "arbol" y devuelve un puntero
  128. a la raÌz del ·rbol resultado. Esta versiÛn no permite duplicados en el
  129. arbol */
  130. {
  131. int x;
  132. P_NODO_ARBOL p; /* Para no perder la cabeza del arbol */
  133. //P_NODO_ARBOL h; /* Para no perder la cabeza del arbol */
  134.  
  135. if (arbol == NULL)
  136. {
  137. p = alojar_nodo_arbol(); /* Reservamos memoria */
  138. p->izq = p->der = NULL; /* Acabamos de crearlo */
  139. p->valor = i;
  140. //h = alojar_nodo_arbol();
  141. //h->izq = h->der = NULL;
  142. //h->nombre = i;
  143. return (p);
  144. }
  145.  
  146. if (arbol->valor == i) /* El valor ya existe. No hacemos nada porque no
  147. permitimos valores duplicados */
  148. return (arbol);
  149.  
  150. if (arbol->valor > i) /* "i" es menor que el valor que analizo, por tanto,
  151. inserto a la izquierda */
  152. arbol->izq = insertar(arbol->izq, i);
  153. // arbol->izq = insertar(arbol->izq, x);
  154.  
  155. else /* "i" es mayor que el valor actual, entonces, inserto a la derecha */
  156. arbol->der = insertar(arbol->der, i);
  157. //arbol->der = insertar(arbol->der, x);
  158.  
  159. return (arbol);
  160. }
  161.  
  162.  
  163. P_NODO_ARBOL borraNodo(P_NODO_ARBOL nodo)
  164. {
  165. free(nodo);
  166.  
  167. return NULL;
  168. }
  169.  
  170.  
  171. void preOrder(P_NODO_ARBOL a)//Posterior
  172. {
  173. if (!esVacio(a))
  174. {
  175. preOrder(a->izq);
  176. preOrder(a->der);
  177.  
  178.  
  179. printf("(%i)-->", a->valor);
  180. }
  181.  
  182. }
  183.  
  184. void postOrder(P_NODO_ARBOL a)//Previo
  185. {
  186. if (!esVacio(a))
  187. {
  188.  
  189. printf("(%i)-->", a->valor);
  190. postOrder(a->izq);
  191. postOrder(a->der);
  192. }
  193.  
  194. }
  195.  
  196. void inOrder(P_NODO_ARBOL a)//Simetrico
  197. {
  198. if (!esVacio(a))
  199. {
  200. inOrder(a->izq);
  201. printf("(%i)-->", a->valor);
  202. inOrder(a->der);
  203. }
  204. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement