insertar guardar fuente ejercicios como codigo busqueda binarios binario archivo arboles arbol c++ c algorithm encoding binary-tree

c++ - fuente - guardar un arbol binario en un archivo en java



Guardar un árbol binario en un archivo (1)

Tengo un árbol binario no balanceado (no de búsqueda binaria) Necesito incoordenarlo (y luego decodificarlo) en un archivo txt. ¿Cómo puedo hacerlo de manera eficiente?

Encontré este enlace que habla de un problema similar (el mismo), pero es obvio para mí


Por favor mira esto en LeetCode .

Me gusta esta solución porque es relativamente eficiente y produce archivos de salida ligera.

Suponiendo que tienes un árbol como este:

_30_ / / 10 20 / / / 50 45 35

Esta solución le permite serializarlo en un archivo de texto de salida:

30 10 50 # # # 20 45 # # 35 # #

Para hacer esto es suficiente realizar un recorrido de pre-pedido simple a través del árbol:

void writeBinaryTree(BinaryTree *p, ostream &out) { if (!p) { out << "# "; } else { out << p->data << " "; writeBinaryTree(p->left, out); writeBinaryTree(p->right, out); } }

Como puede ver, un símbolo # se usa para representar el nodo nulo.

Para deserializar esta cadena en un árbol puede usar:

void readBinaryTree(BinaryTree *&p, ifstream &fin) { int token; bool isNumber; if (!readNextToken(token, fin, isNumber)) return; if (isNumber) { p = new BinaryTree(token); readBinaryTree(p->left, fin); readBinaryTree(p->right, fin); } }

Como dije antes, este método produce una representación ligera del árbol binario.

Por supuesto, tiene un serio inconveniente: requiere un símbolo para representar el nodo nulo.

Puede causar problemas potenciales si los nodos del árbol son cadenas que pueden contener este símbolo.