Tecnología

Inicio

Forma de guardar un árbol binario de búsqueda en un archivo

Un árbol de búsqueda binaria es una estructura de datos donde los registros de datos, llamados \ "nodos, \" tener punteros a otros nodos, llamados \ "los niños. \" Esto da a los nodos, al graficarse a cabo, de una forma similar a un árbol familiar. Los nodos reciben su lugar en el árbol en función de si se evaluarían como mayor o menor de otros nodos. niños que se quedan son siempre menores que sus padres; los niños correctas siempre más.
Árboles binarios de búsqueda son importantes en la informática, ya que pueden ser a la vez ordenados y registraron, en promedio, en O (n log n) tiempo.

Instrucciones

1 Crear una función de almacenamiento que recibe el nodo raíz. Cada vez que usted se ocupa de los árboles en la informática, el algoritmo más eficaz será casi siempre recursiva y almacenar el árbol en un archivo no será una excepción. Aquí es un esqueleto muestra de la función de almacenamiento recursiva (en Java).
public void tienda (Nodo n) throws IOException {
...
}

2 Escribir datos en el nodo raíz en el archivo. Esto utilizará \ "pre-orden transversal \" (Root, Izquierda niño, el derecho del niño) para pasar por todos los nodos en el árbol, ya que este método de recorrido hará que sea más fácil de reconstruir el árbol de la orden de los nodos en el archivo. La función recursiva ahora se ve así:
public void tienda (Nodo n) throws IOException {
escribir (archivo de salvar, n);

}
Tienda debe llamarse a sí misma con el niño dejó:
public void tienda (Nodo n) throws IOException {
escribir (archivo de salvar, n);
tienda (n.left);
}
Tienda debe llamarse a sí misma con el niño a la derecha:
public void tienda (Nodo n) throws IOException {
escribir (archivo de salvar, n);
tienda (n.left);
tienda (n.right)
IR
}

3 Vuelva a comprobar que la función pasa a la lista de verificación recursiva. Para evitar errores de desbordamiento de pila, compruebe siempre que una función recursiva cumple las siguientes condiciones:
¿La función tiene un estado de salida? Sí, siempre que el árbol no es de profundidad infinita, con el tiempo se llegará a un nodo que no tiene ni un niño izquierda o derecha y se cerrará.
¿La cada iteración de la función de acercarse al estado de salida? Sí, suponiendo que el árbol no es circular y ningún nodo tiene uno de sus propios antepasados ​​como un niño.
La función pasa a la lista de verificación.

4 Reconstruir del archivo. Cuando llega el momento de cargar el árbol desde el archivo, simplemente inserte cada nodo en el árbol, ya que se carga desde el archivo utilizando el algoritmo de inserción estándar. Esto debe comenzar en la raíz y trabajar su camino hacia abajo usando recorrido en preorden, colocar el nuevo nodo en el primer espacio vacío en el que va a encajar. Esto debe reconstruir el árbol exactamente como fue compuesto originalmente en O (n log n) en promedio.

Consejos y advertencias

  • Coger StackOverflowException. Aunque es poco probable que va a utilizar todo el espacio de pila en una función recursiva correctamente por escrito, si se está trabajando con Java, asegúrese de tomar el StackOverflowException con todas sus funciones recursivas, por lo que puede tratar con ellos limpiamente.
  • Coger el IOException. Si escribir en el fichero de falla algún lugar del camino, mejor saber cuando el archivo está escrito que cuando se lee un archivo dañado.
  • No almacenar punteros en un archivo. Un simple error sería directamente guardar las variables infantiles izquierda y derecha de cada nodo. En la mayoría de idiomas, estos se implementan como punteros a direcciones de memoria. No hace falta decir que estas direcciones de memoria cambiarán de una carrera a otra, por lo que almacenar en un archivo no tendría sentido.