python - LintCode 7. Serialize and Deserialize Binary Tree

7. Serialize and Deserialize Binary Tree  

设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称为“反序列化”。

如何反序列化或序列化二叉树是没有限制的,你只需要确保可以将二叉树序列化为一个字符串,并且可以将字符串反序列化为原来的树结构。

 注意事项

There is no limit of how you deserialize or serialize a binary tree, LintCode will take your output of serialize as the input of deserialize, it won't check the result of serialize.

"""
Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None
"""


class Solution:
    """
    @param root: An object of TreeNode, denote the root of the binary tree.
    This method will be invoked first, you should design your own algorithm 
    to serialize a binary tree which denote by a root node to a string which
    can be easily deserialized by your own "deserialize" method later.
    """
    def serialize(self, root):
        # write your code here
        tree, ch = [root], []  
        while len(tree) > 0:  
            temp = tree.pop(0)  
            if temp is None:  
                ch.append('#*')  
            else:  
                ch.append(str(temp.val) + '*')  
                tree.append(temp.left)  
                tree.append(temp.right)  
        return ''.join(ch)  

    """
    @param data: A string serialized by your serialize method.
    This method will be invoked second, the argument data is what exactly
    you serialized at method "serialize", that means the data is not given by
    system, it's given by your own serialize method. So the format of data is
    designed by yourself, and deserialize it here as you serialize it in 
    "serialize" method.
    """
    def deserialize(self, data):
        # write your code here
        s1, i = data.split('*'), 0  
        if s1[i] == '#':  
            return None  
        root = TreeNode(int(s1[i]))  
        tree = [root]  
        while len(tree) > 0:  
            te = tree.pop(0)  
            i += 1  
            if s1[i] != '#':  
                k = TreeNode(int(s1[i]))  
                te.left = k  
                tree.append(k)  
            i += 1  
            if s1[i] != '#':  
                k = TreeNode(int(s1[i]))  
                te.right = k  
                tree.append(k)  
        return root  



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值