La Web del Programador: Comunidad de Programadores
 
    Pregunta:  44017 - COMO GUARDAR LOS DATOS SI UTILIZE ARBOLES BINARIOS?
Autor:  Aimet Cruz Abad
Saber como despues de haber utilizado arboles en un programa, guardo la información en un fichero para que cuando reaparezca el juego que creé haya aumentado sus posibiliades

  Respuesta:  Ilean
Pues depende de cómo son los nodos del árbol. En general:
Recorres todos los nodos del árbol de la manera que creas mejor.
Guardas los datos del nodo en el fichero a través de un fwrite.

Mira el ejemplo:

// Definimos la estructura de datos.
typedef struct tag_datos
{
int iDato;
}DATA;
// Definimos el nodo del árbol.
typedef struct tag_nodo
{
tag_nodo *mayor;
tag_nodo *menor;
DATA Dato;
}NODO;

// Estas dos funciones dependen del tipo de datos que tiene guardado cada nodo.
void GuardaDatosNodo(DATA *Data, FILE *hFichero)
{
fwrite(Data, sizeof(DATA), 1, hFichero);
}
int LeeDatosNodo(DATA *Data, FILE *hFichero)
{
if( fread(Data, sizeof(DATA), 1, hFichero) == sizeof(DATA) )
return 1;
return 0;
}

// Esta función recursiva recorre el árbol y va guardando los datos.
void GuardaArbol(NODO *stpNodo, FILE *hFichero)
{
// Guardamos el dato.
GuardaDatosNodo(&stpNodo->Dato, hFichero);
// Continuamos con las demás ramas.
if( stpNodo->menor )
GuardaDatosArbol(stpNodo->menor, hFichero);
if( stpNodo->mayor )
GuardaDatosArbol(stpNodo->mayor, hFichero);
}

void LeeDatosArbol(NODO **stpRaiz)
{
DATA datTemp;
FILE *hFichero = fopen("fichero_arbol", "rb");

while( LeeDatosNodo(&datTemp, hFichero) )
AnyadeDatosArbol(stpRaiz, datTemp);// Esta función debes tenerla definida, evidentemente.
}

int main()
{
NODO *stpRaizArbol;
FILE hFichero;
...
...
...
hFichero = fopen("fichero_arbol", "wb");
GuardaDatosArbol(stpRaizArbol, hFichero);
...
...
...
LeeDatosArbol(&stpRaizArbol);
}
No sé si está correcto, pero creo que la idea sí. Como siempre, si tienes alguna duda:
[email protected] o [email protected]