¿Cómo escribo un código C completo, incluidos todos los bucles y las condiciones de la línea de límite para la eliminación del nodo en el árbol de búsqueda binario?

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.

More Interesting

¿Qué tipos de algoritmos o códigos no valen la pena publicar en trabajos académicos de estudiantes graduados?

¿Cuál es el algoritmo más simple que permite a un robot descubrir e inventar?

¿Qué esfuerzos hará para crear un gráfico de la estructura de datos básicos, que también puede ser entendido por una persona no técnica?

¿Por qué las funciones de límite superior e inferior en C ++ STL dan diferentes índices para el mismo número?

¿Hay alguna forma científica de barrer un piso?

¿Mattermark está utilizando datos para entrenar algoritmos de aprendizaje automático y modelos predictivos que pueden buscar / identificar nuevas empresas potenciales en una etapa temprana que tienen el potencial de interrumpir la industria?

¿Cuáles son algunos ejemplos bien conocidos donde se usa la programación dinámica?

Cómo demostrar que puedes ir de C a L con secuencias de vuelos

Cómo identificar la recursividad en un problema de programación

Dado un conjunto entero tal que cada elemento ocurre 3 veces, excepto un elemento, que ocurre solo una vez, ¿cómo encuentro ese único elemento en el espacio O (1) y en la complejidad del tiempo O (n)?

¿Por qué necesito el complemento de un gráfico?

¿Qué es la búsqueda de fuerza bruta?

Cómo encontrar la cantidad mínima de pasos necesarios para eliminar todos los peones del tablero de ajedrez

¿Por qué la notación O grande es más común si la notación theta grande nos da más información?

¿Cuál es el tiempo de entrenamiento promedio y el tiempo de prueba de los algoritmos de aprendizaje automático más comunes?