5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.

5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.

de Alejandro Blanco -
Número de respuestas: 19
En respuesta a Alejandro Blanco

Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.

de Paola Russo Ganon -
Hola, quisiera consultarles por la función removerTClienteTClientesABB,

estoy teniendo problemas para implementar remover el nodo de un ABB en la opción cuando 2 hijos. He mirado las clases pero justo a esa parte no la abordan porque aparece en los prácticos y tareas, y también miré las diapositivas y el libro, pero ese tipo de código no me está funcionando a la hora de implementarlo en el programa.

Me gustaría entender mejor ¿qué pasos se deben seguir para remover un nodo de este tipo correctamente?

Desde ya, muchas gracias.
En respuesta a Paola Russo Ganon

Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.

de Federico Bello Perez -
Hola,

La idea alto nivel sería que tenes que ir buscando el `id` correspondiente recursivamente hasta encontrarlo. Una vez que lo encontrás tenes eliminarlo y hacer el "enganche".
El ejercicio 3e del práctico te podría ser útil.

Saludos
En respuesta a Alejandro Blanco

Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.

de Máximo Timoteo Piccirillo Malanga -
Hola, me está marcando este mensaje de error en la sección de clientesABB. También se debe liberar la memoria asignada a un cliente cuando se remueve del ABB?
El problema seguramente esté en la función remover, ya que la otra la logré testear a mano y produce los resultados esperados.
No entiendo a que hace referencia el error que emite valgrind.
Gracias.

En respuesta a Alejandro Blanco

Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.

de Sebastián Alexis Beltran Morales -
Buenas, estoy teniendo un problema con esta función y no sabría donde esta mi error, estos son los errores que me salen
Adjunto imagen_2024-09-12_212018411.png
En respuesta a Sebastián Alexis Beltran Morales

Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.

de Octavio De León Ramírez -
Buenas, a mi también me sale lo mismo, pudiste solucionarlo? Porque el programa cuando no uso liberarTCliente  me daba solamente perdida de memoria, el resto del trabajo lo hacía bien, y ahora con eso me da todos esos errores.

En respuesta a Octavio De León Ramírez

Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.

de Yael Michelena Koifmann -
Hola Sebastián y Octavio,

Les diría que tengan cuidado en el caso en que el nodo que quieran remover tenga tanto un subárbol derecho como izquierdo. Como habrán visto en el práctico, en ese caso se puede buscar el nodo máximo del subárbol izquierdo (o el mínimo del derecho), reemplazar la información del nodo que originalmente querían remover con la del nodo máximo, y luego llamar a la función de remover para el nodo máximo del subárbol izquierdo.
El problema a tener en cuenta es que la información de los nodos del ABB en esta tarea, que es de tipo TCliente, está en memoria dinámica. Por lo tanto, no alcanza con hacer que el nodo a remover contenga una referencia al TCliente del nodo máximo, ya que cuando llamen a remover para ese nodo, se liberará la memoria del TCliente, y la referencia quedará apuntando a un lugar de memoria que ya fue liberado.
Para solucionar esto, tendrían que tener una copia de la información del cliente del nodo máximo que no comparta memoria con el original. Probablemente vean que ya tienen una función en el .h de ClientesABB que puede servirles para eso.

Espero que haya quedado claro, cualquier cosa no duden en consultar.

Saludos!
Yael
En respuesta a Alejandro Blanco

Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.

de Valentin Ezequiel Petrone Ruiz -

buenas, tras ejecutar el test 4 me muestra el siguiente error. Probé correr a mano las instrucciones del .in y parece hacer todo normalmente. Todos los otros test de este módulo y los anteriores me muestran --Bien--. Espero pronta respuesta, saludos cordiales

En respuesta a Alejandro Blanco

Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.

de Emiliano Esponda Bentancor -
hola, quería consultarles sobre un problema que tuve al ejecutar el caso de prueba manualmente; como me marcaba error de perdida de memoria intente ejecutar el caso manualmente pero me encontré con este error, no entiendo a que se debe. El error es:
free(): double free detected in tcache 2
Aborted
espero su respuesta, muchas gracias.
En respuesta a Alejandro Blanco

Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.

de Felipe Rosa IbãÃ‘Ez -

Buenas tardes, estoy teniendo este problema y no sabria a que se puede deber, alguna sugerencia? al hacer el diff es que me sale esto, de tamaño excedido. Gracias, saludos.

En respuesta a Felipe Rosa IbãÃ‘Ez

Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.

de Fernando Toral Allende -
Buenas tardes, me sumo a la duda del compañero, debido a que me está saliendo el mismo error, lo único que devuelve el programa es "tamaño excedido" y no puedo encontrar el error en mi función. Gracias
En respuesta a Fernando Toral Allende

Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.

de Yael Michelena Koifmann -
Hola,

Les sugiero que vayan ejecutando de a uno los pasos del test para poder localizar el error, el tamaño excedido se da porque el archivo diff es demasiado grande.

Saludos!
Yael
En respuesta a Alejandro Blanco

Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.

de Gastón Zabaleta Prieto -

Hola, tengo este problema con el caso de prueba 4 t-clientesABB4-maxid-remover

Adjunto Screenshot 2024-09-14 134809.png
En respuesta a Gastón Zabaleta Prieto

Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.

de Yael Michelena Koifmann -
Hola Gastón,

Como se comentó mas arriba, es necesario liberar la memoria asignada al cliente cuando removes del ABB.
Fijate estar haciendo eso correctamente.

Saludos,
Yael
En respuesta a Yael Michelena Koifmann

Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.

de Gastón Zabaleta Prieto -
Lo que hago es crear un TClientesABB aux igualado a clientesABB, y despues de cambiar clientesABB hago delete aux, eso esta mal?
En respuesta a Gastón Zabaleta Prieto

Re: 5. Implemente las funciones maxIdTClienteTClientesABB y removerTClienteTClientesABB.

de Yael Michelena Koifmann -
Lo que quiero decir es que no alcanza con hacer un delete, deberías también en algún momento llamar a la función que libera la memoria del TCliente de ese nodo.

Saludos!
Yael