二叉树问题---二叉树的序列化和反序列化

来源:互联网 发布:ios用什么数据库 编辑:程序博客网 时间:2024/05/24 07:37

说明
二叉树被记录成文件的过程叫作二叉树的序列化,通过文件内容重建原来二叉树的过程叫作二叉树的反序列化

#二叉树的序列化和反序列化(先序)def serialByPre(root):    if not root:        return '#!'    res = root.val + '!'    res += serialByPre(root.left)    res += serialByPre(root.right)    return resdef reconByPreString(preStr):    def reconPreOrder(values):        key = values.pop(0)        if key == '#':            return None        root = TreeNode(key)        root.left = reconPreOrder(values)        root.right = reconPreOrder(values)        return root    values = preStr.split('!')    return reconPreOrder(values)#二叉树的序列化和反序列化(层次)def serialByLevel(root):    if root == '#':        return '#!'    stack = []    stack.append(root)    res = root.val + '!'    while stack:        root = stack.pop()        if root.left:            res += root.left.val + '!'            stack.append(root.left)        else:            res += '#!'        if root.right:            res += root.right.val + '!'            stack.append(root.right)        else:            res += '#!'    return resdef reconByLevelString(levStr):    def generateNode(key):        if key == '#':            return None        return TreeNode(key)    values = levStr.split('!')    head = generateNode(values.pop(0))    queue = []    if head:        queue.append(head)    while queue:        root = queue.pop(0)        root.left = generateNode(values.pop(0))        root.right = generateNode(values.pop(0))        if root.left:            queue.append(root.left)        if root.right:            queue.append(root.right)    return head
原创粉丝点击