Un método que implica recursividad (suponiendo que los datos almacenados en el nodo son un número entero:
Nodo * removeKey (clave int, Nodo * cabeza) { nodo * tmp; if (head! = NULL) { if (clave datos) { head-> left = removeKey (clave, cabeza-> izquierda); } else if (clave> cabeza-> datos) { head-> right = removeKey (clave, cabeza-> derecha); } else if (head-> left == NULL || head-> right == NULL) { / * clave == cabeza-> datos * / tmp = cabeza; if (head-> left == NULL) { cabeza = cabeza-> derecha; } más { cabeza = cabeza-> izquierda; } libre (tmp); / * eliminar el nodo * / } else {/ * ninguno de los nodos secundarios es NULL * / tmp = cabeza-> derecha; while (tmp-> left! = NULL) { tmp = tmp-> izquierda; / * encontrar Min Key en head-> right * / } / * esto podría ser una función separada * / head-> data = tmp-> data; head-> right = removeKey (tmp-> data, head-> right); } } cabeza de retorno; }
Llamado con:
root = removeKey (clave, raíz);
Esta función se ocupa automáticamente del caso en el que no se encuentra la clave que se eliminará, ya que eventualmente recurrirá a un nodo NULL.
- ¿Cuál es la forma más eficiente de detectar, si una cadena es un anagrama de un palíndromo?
- Cómo encontrar la tasa de ganancia más efectiva con la menor cantidad de coincidencias posible (algoritmo)
- ¿El aprendizaje automático es todo sobre software? ¿Qué tipo de hardware se requiere para simular algoritmos de aprendizaje automático?
- ¿Qué estructura de datos debo usar para completar esta tarea?
- ¿Qué es hashing en términos simples?