428. Serialize and Deserialize N ary Tree - cocoder39/coco39_LC GitHub Wiki
428. Serialize and Deserialize N-ary Tree
Pre-order traversal + noting down size of children
class Codec:
def serialize(self, root: 'Node') -> str:
"""Encodes a tree to a single string.
:type root: Node
:rtype: str
"""
data = []
self.serializeHelper(root, data)
return ','.join(data)
def serializeHelper(self, cur: 'Node', data: list) -> None:
if cur:
data.append(str(cur.val))
data.append(str(len(cur.children)))
for child in cur.children:
self.serializeHelper(child, data)
def deserialize(self, data: str) -> 'Node':
"""Decodes your encoded data to tree.
:type data: str
:rtype: Node
"""
if not data:
return None
return self.deserializeHelper(iter(data.split(',')))
def deserializeHelper(self, iterator: iter) -> 'Node':
val = int(next(iterator))
node = Node(val, [])
size = int(next(iterator))
for i in range(size):
child = self.deserializeHelper(iterator)
node.children.append(child)
return node