How to Serialize Binary Tree

后端 未结 10 896
野的像风
野的像风 2020-12-23 21:09

I went to an interview today where I was asked to serialize a binary tree. I implemented an array-based approach where the children of node i (numbering in level-order trave

10条回答
  •  自闭症患者
    2020-12-23 21:41

    Here is a late answer in Python. It uses (depth-first) preorder serialization and returns a list of strings. Deserialization returns the tree.

    class Node:
        def __init__(self, val, left=None, right=None):
            self.val = val
            self.left = left
            self.right = right
    
    
    # This method serializes the tree into a string
    def serialize(root):
        vals = []
        def encode(node):
            vals.append(str(node.val))
            if node.left is not None:
                encode(node.left)
            else:
                vals.append("L")
            if node.right is not None:
                encode(node.right)
            else:
                vals.append("R")
        encode(root)
        print(vals)
        return vals
    
    
    # This method deserializes the string back into the tree
    def deserialize(string_list):
        def create_a_tree(sub_list):
            if sub_list[0] == 'L' or sub_list[0] == 'R':
                del sub_list[0]
                return None
            parent = Node(sub_list[0])
            del sub_list[0]
            parent.left = create_a_tree(sub_list)
            parent.right = create_a_tree(sub_list)
            return parent
        if len(string_list) != 0:
            root_node = create_a_tree(string_list)
        else:
            print("ERROR - empty string!")
            return 0
        return root_node
    

    To test:

    tree1 = Node('root', Node('left'), Node('right'))
    t = deserialize(serialize(tree1))
    print(str(t.right.val))
    

提交回复
热议问题