3. 木構造の実装

問題

Given the root to a binary tree, implement serialize(root), which serializes the tree into a string, and deserialize(s), which deserializes the string back into the tree.

実装

再帰的に実装します。Noneでなければ展開するようにしています。

class Node():
    def __init__(self, val, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def serialize(node):
    def visit(val):
        return val
    if(node):
        return [visit(node.val), serialize(node.left), serialize(node.right)]

def deserialize(s):
    if(s):
        return Node(s[0], deserialize(s[1]), deserialize(s[2]))

if __name__ == "__main__":
    node = Node('root', Node('left', Node('left.left')), Node('right'))
    print(serialize(node))
    assert deserialize(serialize(node)).left.left.val == 'left.left'