struct rep_personasAbb { TPersona persona; TPersonasABB left; TPersonasABB right; }; typedef struct rep_personasAbb* TPersonasABB; // Función para eliminar una persona del árbol binario // En caso de que el nodo a remover tenga ambos subárboles no vacíos, // se reemplaza por la Persona con el id más grande del subárbol izquierdo. // La funcion es Theta(n) peor caso, siendo n la cantidad de personas en el árbol binario // PRE: la persona está en el árbol binario void removerTPersonasABB(TPersonasABB &personasABB, nat id) {
// La función ajusta el árbol binario para que cumpla con las propiedades // de árbol binario de búsqueda, en caso de que no lo cumpla. // La función es O(log n), siendo n la cantidad de personas en el árbol binario // PRE: personasABB es un árbol binario de búsqueda void balancearTPersonasABB(TPersonasABB &personasABB) { if (personasABB == NULL) return; if (altura(personasABB->right) - altura(personasAbb->left) > 1) if (altura(personasABB->right->right) >= altura(personasABB->right->left)) rotarIzquierda(personasABB); else rotarDobleIzquierda(personasABB); else if (altura(personasAbb->left) - alt