Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: danielSoccer en 11 Noviembre 2016, 02:08 am



Título: arbol binario de busqueda
Publicado por: danielSoccer en 11 Noviembre 2016, 02:08 am
Quisiera que alguien me colaborara con alguna funcion con el codigo que les voy a mostrar que muestre el valor mayor y menor de los nodos almacenados y mostrar el nivel de un nodo(el nivel del nodo es consultado por teclado) se los agradeceria muchas gracias
Código
  1. #include <iostream>
  2. #include <stdlib.h>
  3.  
  4. using namespace std;
  5.  
  6. /*---------  Estructura del arbol  -------*/
  7. typedef struct nodo{
  8. int nro;
  9. struct nodo *izq, *der;
  10. }*ABB;
  11.  
  12. int numNodos = 0; // nummero de nodos del arbol ABB
  13.  
  14.  
  15.  
  16. /* ---------- Estructura de la cola ---------*/
  17. struct nodoCola{
  18. ABB ptr;
  19. struct nodoCola *sgte;
  20. };
  21. struct cola{
  22. struct nodoCola *delante;
  23. struct nodoCola *atras;
  24. };
  25.  
  26. void inicializaCola(struct cola &q)
  27. {
  28. q.delante = NULL;
  29. q.atras = NULL;
  30. }
  31.  
  32. void encola(struct cola &q, ABB n)
  33. {
  34. struct nodoCola *p;
  35. p = new(struct nodoCola);
  36. p->ptr = n;
  37. p->sgte = NULL;
  38. if(q.delante==NULL)
  39.   q.delante = p;
  40. else
  41. (q.atras)->sgte = p;
  42. q.atras = p;
  43. }
  44.  
  45. ABB desencola(struct cola &q)
  46. {
  47. struct nodoCola *p;
  48. p = q.delante;
  49. ABB n = p->ptr;
  50. q.delante = (q.delante)->sgte;
  51. delete(p);
  52. return n;
  53. }
  54.  
  55. ABB crearNodo(int x)
  56. {
  57. ABB nuevoNodo = new(struct nodo);
  58. nuevoNodo->nro = x;
  59. nuevoNodo->izq = NULL;
  60. nuevoNodo->der = NULL;
  61.  
  62. return nuevoNodo;
  63. }
  64. void insertar(ABB &arbol, int x)
  65. {
  66. if(arbol==NULL)
  67. {
  68. arbol = crearNodo(x);
  69. cout<<"\n\t  Insertado..!"<<endl<<endl;
  70. }
  71. else if(x < arbol->nro)
  72. insertar(arbol->izq, x);
  73. else if(x > arbol->nro)
  74. insertar(arbol->der, x);
  75. }
  76.  
  77. void preOrden(ABB arbol)
  78. {
  79. if(arbol!=NULL)
  80. {
  81. cout << arbol->nro <<" ";
  82. preOrden(arbol->izq);
  83. preOrden(arbol->der);
  84. }
  85. }
  86.  
  87. void enOrden(ABB arbol)
  88. {
  89. if(arbol!=NULL)
  90. {
  91. enOrden(arbol->izq);
  92. cout << arbol->nro << " ";
  93. enOrden(arbol->der);
  94. }
  95. }
  96.  
  97. void postOrden(ABB arbol)
  98. {
  99. if(arbol!=NULL)
  100. {
  101. enOrden(arbol->izq);
  102. enOrden(arbol->der);
  103. cout << arbol->nro << " ";
  104. }
  105. }
  106.  
  107. void verArbol(ABB arbol, int n)
  108. {
  109. if(arbol==NULL)
  110.   return;
  111. verArbol(arbol->der, n+1);
  112.  
  113. for(int i=0; i<n; i++)
  114. cout<<"   ";
  115.  
  116. numNodos++;
  117. cout<< arbol->nro <<endl;
  118.  
  119. verArbol(arbol->izq, n+1);
  120. }
  121.  
  122. bool busquedaRec(ABB arbol, int dato)
  123. {
  124. int r=0;   // 0 indica que lo encontre
  125.  
  126. if(arbol==NULL)
  127.   return r;
  128.  
  129. if(dato<arbol->nro)
  130.   r = busquedaRec(arbol->izq, dato);
  131.  
  132. else if(dato> arbol->nro)
  133. r = busquedaRec(arbol->der, dato);
  134.  
  135. else
  136. r = 1;   // son iguales, lo encontre
  137.  
  138. return r;
  139. }
  140.  
  141. ABB unirABB(ABB izq, ABB der)
  142. {
  143. if(izq==NULL) return der;
  144. if(der==NULL) return izq;
  145.  
  146. ABB centro = unirABB(izq->der, der->izq);
  147. izq->der = centro;
  148. der->izq = izq;
  149. return der;
  150. }
  151.  
  152. void elimina(ABB &arbol, int x)
  153. {
  154. if(arbol==NULL) return;
  155.  
  156. if(x<arbol->nro)
  157.   elimina(arbol->izq, x);
  158. else if(x>arbol->nro)
  159. elimina(arbol->der, x);
  160.  
  161. else
  162. {
  163. ABB p = arbol;
  164. arbol = unirABB(arbol->izq, arbol->der);
  165. delete p;
  166. }
  167. }
  168.  
  169.  
  170.  
  171. void recorrerxNivel(ABB arbol)
  172. {
  173. struct cola q;
  174. inicializaCola(q);
  175. cout << "\t";
  176.  
  177. if(arbol!=NULL)
  178. {
  179. encola(q, arbol);
  180.  
  181. while(q.delante!=NULL)
  182. {
  183. arbol = desencola(q);
  184. cout << arbol->nro << ' ';
  185.  
  186. if(arbol->izq!=NULL)
  187.   encola(q, arbol->izq);
  188.   if(arbol->der!=NULL)
  189.  encola(q, arbol->der);
  190. }
  191. }
  192. }
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200. void menu()
  201. {
  202. //system("cls");
  203. cout << "\n\t\t  ..[ ARBOL BINARIO DE BUSQUEDA ]..  \n\n";
  204. cout << "\t [1]  Insertar elemento                  \n";
  205. cout << "\t [2]  Mostrar arbol                      \n";
  206. cout << "\t [3]  Recorridos de profundiad           \n";
  207. cout << "\t [4]  Buscar elemento                    \n";
  208. cout << "\t [5]  Eliminar elemento                  \n";
  209. cout << "\t [6]  Recorrido por nieveles (Amplitud)  \n";
  210.    cout << "\t [7]  Nodos menores de 'k'               \n";
  211. cout << "\t [11] SALIR                              \n";
  212.  
  213. cout << "\n\t Ingrese opcion : ";
  214. }
  215.  
  216. void menu2()
  217. {
  218. system("cls");
  219. cout << endl;
  220. cout << "\t [1] En Orden     \n";
  221. cout << "\t [2] Pre Orden    \n";
  222. cout << "\t [3] Post Orden   \n";
  223. cout << "\n\t     Opcion :  ";
  224. }
  225.  
  226. int main()
  227. {
  228. ABB arbol = NULL;
  229. int x;
  230. int op, op2;
  231.  
  232.  
  233. //system("color f9");   // poner color a la consola
  234. do
  235. {
  236. menu();  cin>> op;
  237. cout << endl;
  238.  
  239. switch(op)
  240. {
  241. case 1:
  242. cout << " Ingrese valor : ";  cin>> x;
  243. insertar( arbol, x);
  244. break;
  245.  
  246. case 2:
  247. verArbol(arbol, 0);
  248. break;
  249.  
  250. case 3:
  251. menu2();  cin>> op2;
  252.  
  253. if(arbol!=NULL)
  254. {
  255. switch(op2)
  256. {
  257. case 1:
  258. enOrden(arbol); break;
  259. case 2:
  260. preOrden(arbol); break;
  261. case 3:
  262. postOrden(arbol); break;
  263. }
  264. }
  265. else
  266.   cout << "\n\t Arbol vacio..!";
  267. break;
  268.  
  269. case 4:
  270. bool band;
  271.  
  272. cout<<" Valor a buscar: "; cin>> x;
  273.  
  274. band = busquedaRec(arbol,x);
  275.  
  276. if(band==1)
  277.   cout << "\n\tEncontrado...";
  278. else
  279. cout << "\n\tNo encontrado...";
  280. break;
  281.  
  282. case 5:
  283. cout<<" Valor a eliminar: "; cin>> x;
  284. elimina(arbol, x);
  285. cout << "\n\tEliminado..!";
  286. break;
  287.  
  288. case 6:
  289. cout<<"\n\n Mostrando recorrido por amplitud\n\n";
  290. recorrerxNivel(arbol);
  291. break;
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298. case 8:
  299. exit(0);
  300. }
  301.  
  302. cout<<"\n\n\n";
  303. system("pause");
  304. }while(op!=8);
  305.  
  306. }




El que tenga la funcion le recompensare con paypal xbox live o dinero real (y)

Mod: Los códigos deben ir en etiquetas GeSHi, no escribir en mayúsculas, no hagas doble post