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] |