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

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

#二叉树的序列化和反序列化(先序)
def serialByPre(root):
    if not root:
        return '#!'
    res = root.val + '!'
    res += serialByPre(root.left)
    res += serialByPre(root.right)
    return res

def 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 res

def 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值