[Leetcode] 0297. Serializar y deserializar árboles binarios

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

Pitó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
				
			
es_ESEspañol