elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  eliminar un dato de arbol
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: eliminar un dato de arbol  (Leído 1,857 veces)
Anduresu

Desconectado Desconectado

Mensajes: 3


Ver Perfil
eliminar un dato de arbol
« en: 30 Julio 2020, 00:36 am »

necesito ayuda la verdad no puede logarar que los datos del arbol se eliminen
no logro avanzar de ahi me serviria mucho su ayuda o consejos gracias
eliminar un solo dato del arbol
y despues que se eliminen todos los datos del arbol
 
Código
  1. #include<stdio.h>
  2. #include<windows.h>
  3.  
  4. struct nodo{
  5. double dato;
  6. nodo *derecho;
  7. nodo *izquierdo;
  8. nodo *padre;
  9. };
  10.  
  11. nodo *arbol=NULL;
  12. //--------------------------elliminar dato----------------------------------
  13. void eliminar(nodo*arbol,double num)
  14. {
  15. if(arbol ==NULL)
  16. {
  17. return;
  18. }
  19. else if(num<arbol ->dato)
  20. {
  21. eliminar(arbol->izquierdo,num);
  22. }
  23. else if(num>arbol->dato)
  24. {
  25. eliminar(arbol-> derecho,num);
  26. }
  27. else
  28. {
  29. eliminarnodo(arbol);
  30. }
  31.  
  32.  
  33. }
  34. //--------------------------------------------------------------------------
  35. nodo*minimo(nodo*arbol)
  36. {
  37. if(arbol ==NULL)
  38. {
  39. return NULL;
  40. }
  41. if(arbole->izquierdo)
  42. {
  43. return minimo(arbol->izquierdo);
  44. }
  45. else
  46. {
  47. return arbol;
  48. }
  49. }
  50. //----------------------------------------------------------------
  51. void reemplazar(nodo *arbol,nodo* nuevonodo)
  52. {
  53. if(arbol->padre)
  54. {
  55.  
  56. if(arbol->dato =arbol->padre->izquierdo->dato)
  57. {
  58. arbol->padre->padre->izquierdo=nuevonodo;
  59. }
  60. else if(arbol->dato==arbol->padre->derecho->dato)
  61. {
  62. arbol->padre->derecho=nuevonodo;
  63. }
  64.  
  65. }
  66. if(nuevonodo)
  67. {
  68. nuevonodo->padre=arbol->padre;
  69. }
  70. }
  71. //--------------------------------------------------------------------------
  72. void destruirnodo(nodo *nodo)
  73. {
  74. nodo->izquierdo=NULL;
  75. nodo->derecho=NULL;
  76.  
  77. delete nodo;
  78. }
  79. //---------------------------------------------------------------------------
  80. void eliminarnodo(nodo*nodoeliminar)
  81. {
  82. if(nodoeliminar->izquerdo && nodoeliminar->derecho)
  83. {
  84. nodo*menor=minimo(nodoeliminar->derecho);
  85. nodoeliminar->dato=menor->dato;
  86. eliminarnodo(menor);
  87. }
  88. else if(nodoeliminar->izquierdo)
  89. {
  90. reemplazar(nodoeliminar,nodoeliminar->izquierda);
  91. destruirnodo(nodoeliminar);
  92. }
  93. else if(nodoeliminar->derecho)
  94. {
  95. reemplazar(nodoeliminar,nodoeliminar->derecho);
  96. destruirnodo(nodoeliminar);
  97. }
  98. }
  99. //--------------------------CONSULTAR DATOS---------------------------------
  100. bool consultar(nodo *arbol, double num){
  101.  
  102. if(arbol == NULL)
  103. {
  104. return false;
  105. }
  106. else if(arbol->dato == num)
  107. {
  108. return true;
  109. }
  110. else if(num < arbol->dato)
  111. {
  112. return consultar(arbol->izquierdo, num);
  113. }
  114. else
  115. {
  116. return consultar(arbol->derecho, num);
  117. }
  118.  
  119. }
  120.  
  121. //--------------------------MOSTRAR DATOS---------------------------------
  122. void mostrar(nodo *arbol, double cont)
  123. {
  124. if(arbol==NULL)
  125. {
  126. return;
  127. }
  128. else
  129. {
  130. mostrar(arbol->derecho, cont+1);
  131. for(int i=0;i<cont; i++)
  132. printf("    ");
  133. printf(" %.2lf \n\n",arbol->dato);
  134.  
  135. mostrar(arbol->izquierdo, cont+1);
  136.  
  137. }
  138.  
  139. }
  140. //-------------------------------------------------------------------------
  141.  
  142. nodo * crear(double num)
  143. {
  144. nodo * nuevonodo = new nodo();
  145. nuevonodo->dato = num;
  146. nuevonodo->derecho = NULL;
  147. nuevonodo->izquierdo = NULL;
  148.  
  149. return nuevonodo;
  150. }
  151. //---------------------------INSERTAR DATOS--------------------------------
  152. void insertar(nodo *&arbol, double num)
  153. {
  154. if(arbol == NULL)
  155. {
  156. nodo *nuevonodo = crear(num);
  157. arbol = nuevonodo;
  158. }
  159. else
  160. {
  161. int raiz=arbol->dato;
  162. if(num < raiz)
  163. insertar(arbol->izquierdo, num);
  164. else
  165. {
  166. insertar(arbol->derecho, num);
  167. }
  168. }
  169. }
  170. //------------------------------MENU-----------------------------------------------------
  171. void menu()
  172. {
  173. int opc, cont=0;
  174. double num;
  175. char resp;
  176.  
  177. do{
  178. system("cls");
  179. printf("\n\t MENU ARBOLES BINARIOS");
  180. printf("\n\t **** ******* ********");
  181.  
  182. printf("\n [1]...Agregando datos al %crbol",160);
  183. printf("\n [2]...Mostrar datos del %crbol",160);
  184. printf("\n [3]...Consultar datos del %crbol",160);
  185. printf("\n [4]...Eliminar un dato del %crbol",160);
  186. printf("\n [5]...Eliminar todos los datos del %crbol",160);
  187. printf("\n [6]...SALIR");
  188. do{
  189. printf("\n Ingrese una opci%cn: ",162);
  190. scanf("%d", &opc);
  191. if(opc<1 || opc>6);
  192. printf("\n ERROR...Ingrese una opci%cn v%clida[1-6]: ",162, 160);
  193. }while(opc<1 || opc>6);
  194.  
  195. switch(opc){
  196. case 1:
  197. system("cls");
  198. printf("\n\t INGRESO DATOS AL ARBOL");
  199. printf("\n\t ******* ** ***** ** *****");
  200.  
  201. do{
  202. printf("\n Ingrese un n%cmero al arbol: ", 163);
  203. scanf("%lf", &num);
  204. insertar(arbol, num);
  205.  
  206. do
  207. {
  208. printf("\n %cDesea ingresar otro dato al arbol?: ",168);
  209. scanf("%s", &resp);
  210. resp=toupper(resp);
  211. if(resp != 'S' && resp != 'N')
  212. printf("\n ERROR... Ingrese una opcion valida[S-N]");
  213. }while(resp != 'S' && resp != 'N');
  214. }while(resp=='S');
  215.  
  216. break;
  217.  
  218. case 2:
  219. system("cls");
  220. printf("\n\t MOSTRANDO DATOS DEL ARBOL");
  221. printf("\n\t ********* ***** *** *****\n");
  222. mostrar(arbol, cont);
  223. system("pause");
  224. break;
  225.  
  226. case 3:
  227. system("cls");
  228. printf("\n\t CONSULTAR DATOS DEL DATOS");
  229. printf("\n\t ********* ***** *** *****");
  230.  
  231. do{
  232. printf("\n Ingrese un n%cmero a buscar del arbol: ",163);
  233. scanf("%lf", &num);
  234.  
  235. if(consultar(arbol, num) == true)
  236. {
  237. printf("\n EL ELEMENTO [%.2lf] HA SIDO ENCONTRADO", num);
  238. printf("\n");
  239. }
  240. else
  241. {
  242. printf("\n EL DATO [%.2lf] NO ESTA GUARDADO EN EL ARBOL.",num);
  243. printf("\n");
  244. }
  245. printf("\n");
  246. system("pause");
  247.  
  248. do
  249. {
  250. printf("\n %cDesea buscar otro dato dentro del %crbol?: ",168,160);
  251. scanf("%s", &resp);
  252. resp=toupper(resp);
  253. if(resp != 'S' && resp != 'N')
  254. printf("\n ERROR... Ingrese una opcion valida[S-N]");
  255. }while(resp != 'S' && resp != 'N');
  256. }while(resp=='S');
  257. break;
  258. case 4:
  259. system("cls");
  260. printf("\n\t eliminar un DATO DEL arbol");
  261. printf("\n\t ********* ***** *** *****");
  262. eliminar(arbol,num);
  263.  
  264. default:
  265. exit(0);
  266. }
  267.  
  268. }while(opc != 6);
  269.  
  270.  
  271.  
  272. }
  273.  
  274. main()
  275. {
  276. menu();
  277. return 0;
  278. }


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
eliminar ancestros de hojas arbol binario c++
Programación C/C++
Lain SEL 2 6,789 Último mensaje 18 Agosto 2010, 04:05 am
por Lain SEL
Eliminar nodo en un arbol binario
.NET (C#, VB.NET, ASP)
DaNuK 4 29,022 Último mensaje 6 Diciembre 2010, 20:19 pm
por DaNuK
ayuda para eliminar un dato de una agenda, en c
Dudas Generales
alexander-pedro 1 2,231 Último mensaje 11 Julio 2013, 23:04 pm
por Caster
ayuda para eliminar un dato de una agenda, en c
Programación C/C++
alexander-pedro 5 9,440 Último mensaje 16 Julio 2013, 11:00 am
por aguml
Eliminar dato de matriz y array
.NET (C#, VB.NET, ASP)
eleaefe 3 3,620 Último mensaje 30 Junio 2017, 16:25 pm
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines