剑指Offer(Python多种思路实现):序列化二叉树

剑指Offer(Python多种思路实现):序列化二叉树

面试37题:

题:序列化二叉树

题目:请实现两个函数,分别用来序列化和反序列化二叉树

解题思路一:首先来看二叉树的序列化,二叉树的序列化就是采用前序遍历二叉树输出节点,再碰到左子节点或者右子节点为None的时候输出一个特殊字符”#”。对于反序列化,就是针对输入的一个序列构建一棵二叉树,我们可以设置一个指针先指向序列的最开始,然后把指针指向位置的数字转化为二叉树的结点,后移一个数字,继续转化为左子树和右子树。当遇到当前指向的字符为特殊字符”#”或者指针超出了序列的长度,则返回None,指针后移,继续遍历。

class Solution:
    flag=-1
    def Serialize(self, root):
        # write code here
        if not root:
            return '#'
        return str(root.val)+','+self.Serialize(root.left)+','+self.Serialize(root.right)

        
    def Deserialize(self, s):
        # write code here
        self.flag+=1
        lis=s.split(',')
        
        if self.flag>=len(s):
            return None
        
        root=None
        if lis[self.flag]!='#':
            root=TreeNode(int(lis[self.flag]))
            root.left=self.Deserialize(s)
            root.right=self.Deserialize(s)
        return root

解题思路二:

class Codec:
    def serialize(self, root):
        if not root:
            return '$'
        return str(root.val) + ',' + self.serialize(root.left) + ',' + self.serialize(root.right)
    def deserialize(self, data):
        def deserialize_tree(nodes):
            val = next(nodes)
            if val == '$':
                return None
            root = TreeNode(val)
            root.left = deserialize_tree(nodes)
            root.right = deserialize_tree(nodes)
            return root     
        nodes = iter(data.split(','))
        return deserialize_tree(nodes)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值