Explore diversas soluciones LeetCode en Python, C++, JavaScript, SQL y TypeScript. Ideal para preparación de entrevistas, aprendizaje y práctica de código en múltiples lenguajes de programación. Enlace de repositorio de Github
La serialización es el proceso de convertir una estructura de datos o un objeto en una secuencia de bits para que pueda almacenarse en un archivo o en un búfer de memoria, o transmitirse a través de un enlace de conexión de red para reconstruirse más tarde en el mismo entorno informático o en otro.
Diseñar un algoritmo para serializar y deserializar un árbol binario. No existe ninguna restricción sobre cómo debe funcionar su algoritmo de serialización/deserialización. Solo hay que asegurarse de que un árbol binario pueda serializarse en una cadena y que esta cadena pueda deserializarse en la estructura del árbol original.
Clarificación: El formato de entrada/salida es el mismo que Cómo LeetCode serializa un árbol binario. No es necesario que sigas necesariamente este formato, así que sé creativo y piensa en enfoques diferentes.
Ejemplo 1:
Aporte: raíz = [1,2,3,nulo,nulo,4,5] Producción: [1,2,3,nulo,nulo,4,5]
Ejemplo 2:
Aporte: raíz = [] Producción: []
Restricciones:
- El número de nodos en el árbol está en el rango
[0, 10 4 ]
. -1000 <= Nodo.val <= 1000
Tabla de contenido
PalancaPitón
Complejidad de tiempo #: O(n) Complejidad de espacio #: O(h) de colecciones importar deque de escribir importar Clase opcional Códec: def serialize(self, root: Optional[TreeNode]) -> str: if not root: return '' cola = deque([root]) resultado = [] mientras cola: nodo = cola.popleft() si nodo: resultado.append(str(nodo.val)) cola.extend([nodo.left, nodo.right]) else: resultado.append('None') return ','.join(resultado) def deserialize(self, data: str) -> Optional[TreeNode]: if not data: return None dataList = data.split(',') raíz = TreeNode(int(dataList[0])) cola = deque([root]) i = 1 mientras cola y i < len(dataList): nodo = cola.popleft() leftVal, rightVal = dataList[i], dataList[i+1] if i + 1 < len(dataList) else 'None' if leftVal != 'None': node.left = TreeNode(int(leftVal)) queue.append(node.left) if rightVal != 'None': node.right = TreeNode(int(rightVal)) queue.append(node.right) i += 2 return root # Su objeto Codec será instanciado y llamado como tal: root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(5) root.left.left = TreeNode(3) root.left.right = TreeNode(4) ser = Codec() deser = Codec() tree = ser.serialize(root) print(tree) # '1,2,5,3,4,Ninguno,Ninguno,Ninguno,Ninguno,Ninguno,' ans = deser.deserialize(tree) print(ans.val) # 1 print(ans.left.val) # 2 print(ans.right.val) # 5 print(ans.left.left.val) # 3 print(ans.left.right.val) # 4