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

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Arbol binario de busqueda
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Arbol binario de busqueda  (Leído 2,850 veces)
LadyWin

Desconectado Desconectado

Mensajes: 17


Ver Perfil
Arbol binario de busqueda
« en: 11 Septiembre 2021, 22:49 pm »

Hola! como andan? Queria consultarles si me pueden ayudar a encontrar el error, no me funciona correctamente, lo mas probable es que este a la hora eliminar me estoy salteando algo y no se que es, desde ya muchas gracias! ;D ;D

A la hora de mostrar el arbol resultante se transforma en un bucle infinito, me empieza a mostrar direcciones de memoria
Código
  1. void eliminar (Arbol * ppio, int x)
  2. { // Busca el elemento que se desea eliminar
  3. if (esVacio(*ppio)) return;
  4. else if (x < (*ppio)->dato)
  5. // Si el valor es menor se recorre por la izquierda
  6. eliminar(&(*ppio)->hizq,x);
  7.  
  8. else if (x > (*ppio)->dato)
  9. // Si el valor es mayor se recorre por la derecha
  10. eliminar(&(*ppio)->hder,x);
  11.  
  12. else
  13. // Si ya encontraste el valor
  14. eliminar_elemento (ppio);
  15.  
  16. }
  17. void eliminar_elemento (Arbol * a)
  18. { // Elimina el elemento que se desea
  19. if (esHoja(*a))
  20. // Si es una hoja
  21. free(*a);
  22.  
  23. else if (esPadreCompleto(*a))
  24. { // Si es padre con dos hijos
  25. Arbol * min = minimo(&(*a)->hder);
  26. (*a)->dato = (*min)->dato;
  27. free(*min);
  28. }
  29. else
  30. // Si tiene solo un hijo
  31. a = reemplazar(a);
  32. }
  33. Arbol * minimo (Arbol * a)
  34. { // Busca el menor elemento
  35. if (esVacio(*a)) return NULL; // Retornas nulo si el arbol esta vacio
  36. if (!esVacio((*a)->hizq))
  37. // Si tiene hijo izquierdo
  38. return minimo(&(*a)->hizq); // Buscamos la parte mas izq posible
  39. else
  40. // Si no tiene hijo izq
  41. return a; // Retornamos el mismo nodo
  42.  
  43. }
  44. Arbol * reemplazar (Arbol * a)
  45. { // Reemplaza los valores padre con hijo
  46. Arbol aux;
  47. if (!esVacio((*a)->hizq))
  48. {
  49. aux = *a;
  50. *a = (*a)->hizq;
  51. free(aux);
  52. } else
  53. {
  54. aux = *a;
  55. (*a) = (*a)->hder;
  56. free(aux);
  57. }
  58. return a;
  59. }


« Última modificación: 11 Septiembre 2021, 22:51 pm por LadyWin » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
MOVIDO: Arbol binario de busqueda
ASM
Eternal Idol 0 2,749 Último mensaje 15 Septiembre 2009, 19:18 pm
por Eternal Idol
Interrupción en programa de C++ extraña - Arbol binario de busqueda.
Programación C/C++
lb12 0 1,770 Último mensaje 7 Enero 2015, 22:13 pm
por lb12
Arbol Binario de Busqueda
Programación C/C++
GoBrit 0 1,560 Último mensaje 12 Noviembre 2015, 21:29 pm
por GoBrit
Urgenteeeeee!!! Ayuda con arbol binario de busqueda
Programación C/C++
mathias_vg 2 2,285 Último mensaje 20 Noviembre 2015, 18:54 pm
por 0xFer
arbol binario de busqueda
Programación C/C++
danielSoccer 0 1,696 Último mensaje 11 Noviembre 2016, 02:08 am
por danielSoccer
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines