Algoritmo (eliminar un nodo de un binario números de búsqueda)

Dado un nodo raíz de un árbol binario de búsqueda y un valor de raíz clave , elimine el árbol de búsqueda binaria clave correspondiente a un nodo, y asegurarse de que las propiedades del mismo árbol de búsqueda binaria. Devuelve el árbol de búsqueda binaria (con probabilidad de ser actualizado) una referencia al nodo raíz. 

En general, los nodos de borrado se pueden dividir en dos etapas: en 

primer lugar, encontrar el nodo que desea borrar, 
si lo encuentra, eliminarlo.

Explicación: La complejidad de tiempo del algoritmo requiere O (h), h es la altura del árbol.

 
 

Ejemplo:

 
 
= Raíz [5,3,6,2,4, null, 7] 
Key 3 = 

    5 
   / \ 
  3 6 
 / \ \ 
2 4 7 

nodos deben ser eliminados para un valor dado es 3, por lo que en primer lugar el nodo 3, a continuación, eliminarlo. 

Una respuesta correcta es [5,4,6,2, null, null, 7 ], como se muestra a continuación. 

    5 
   / \ 
  46 
 / \ 
27 

más respuesta correcta es [5,2,6, null, 4, null , 7]. 

    5 
   / \ 
  26 
   \ \ 
    47
 
/ * * 
 * Definición de un nodo de árbol binario. 
 * Tipo de NodoArbol struct { 
 * Val int 
 * Izquierda * TreeNode 
 * Derecha * TreeNode 
 *} 
 * / 
func deleteNode (raíz * NodoArbol, clave int) * NodoArbol {
     si (raíz == nil) {
         retorno nil 
    } 
    si ( clave <raíz. val) { 
        raíz .Left = deleteNode (root.Left, clave )
         de retorno de la raíz 
    } demás  si ( clave > raíz. val) { 
        raíz .RIGHT = deleteNode (root.Right, Key )
         devolver la raíz 
    } else {
         SI (root.Left == nil) {
             devolver la raíz. Derecha 
        } 
        SI (root.Right == nil) {
             devolver la raíz. Izquierda 
        } 
        // nueva nueva y hacer una diferencia, para recordar 
        // crear objetos hacen que sólo puede ser creado por elaborar el mapa Chan rebanada 
        // marca sólo se puede utilizar para asignar e inicializar el tipo de segmento, mapa, Chan datos. Puede asignar cualquier nuevo tipo de datos; 
        // devolver un puntero nueva asignación, es decir, escriba * Tipo. maquillaje devuelve una referencia a ese tipo; 
        el espacio // nueva asignación se borra. hacer que el espacio de distribución, se inicializa;
        // función únicamente prevén el mapa, rebanada y el canal, y no devuelve un puntero al 
        nodo: = nuevo nuevo(NodoArbol) 
        nodo = findMin (raíz. Derecha) 
        raíz .val = nodo. Val 
        raíz .RIGHT = deleteNode (root.Right, nodo. Val) 
    } 
    retorno raíz 
} 

func findMin (nodo * NodoArbol) * NodoArbol {
     a {
         // golang没有mientras que 
        si node.Left == nil {
             rotura 
        } 
        nodo = nodo. Izquierda 
    } 
    retorno nodo 
}

 

Supongo que te gusta

Origin www.cnblogs.com/cjjjj/p/12550356.html
Recomendado
Clasificación