Hola Pablo. Respondo a tus preguntas en negrita.
1.
Cuando yo inserto un elemento con un procedimiento insertar(uint x, ABB
&a), es importante hacia donde queda apuntando el árbol a ?
Si es importante.
A dónde
se supone que queda apuntando?
Depende de lo que hayas hecho, no entiendo mucho la duda.
Si yo uso luego el árbol fuera del
procedimiento, el árbol a sigue apuntando a la raíz?
El insertar debería devolver un árbol con el elemento insertado. Es decir, un puntero que apunte a la raíz del árbol que se desea devolver.
Con respecto a todo esto, te recomiendo la explicación de insertar que está en este video de teórico https://www.youtube.com/embed/HP1AFJl0j3s?start=620&end=2585&version=3
Verás que se propone una solución recursiva que modifica (cuando es necesario) el puntero a la raíz.
2. Cuando
tengo que liberar un árbol, hay que liberar el elemento antes de hacer
delete borrar? (siendo borrar un puntero a un árbol).
Depende como está definida la estructura del nodo y el elemento.
Por ejemplo, en las definiciones de las figuras 1 y 2 del práctico 4, eso no es necesario porque el elemento es un natural definido dentro del nodo.
En el árbol del ej. 4, tampoco es necesario porque el elemento es un struct dentro del nodo.
Sin embargo, si tuviéramos una estructura como la que pongo acá abajo si sería necesario. Si ves, en este caso el elemento es un puntero a otro lugar de memoria que cuando se creó el nodo se debió reservar.
struct EstInfo {
uint nota;
int ci;
};
struct nodoABB {
EstInfo *info;
nodoABB * izq , * der ;
};
En caso de que
haya que liberar el elemento previamente, se puede hacer delete
borrar->elem?
Exacto. en el ejemplo anterior sería delete borrar->info;
3. En la función borrar del ejercicio 5. Yo lo
que hago es buscar el elemento, y luego verificar todas las condiciones
necesarias y ahi eliminar el nodoAG. Pero; cómo hago para que el padre
del que yo borré apunte a NULL? Porque si bien estoy borrando un nodo,
no estoy dejando bien al árbol.
El padre del nodo que borraste no debería apuntar a null, sino al siguiente hermano.
Cuando planteas una solución recursiva, tené en cuenta que el puntero en el que estas parado es el puntero del padre que apunta al hijo. Es decir, si tu puntero es a, podes hacer aux = a; a = a->sH; delete aux;
Desde ya, muchas gracias.
Espero se entienda. Cualquier cosa preguntá nuevamente.