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