297.二叉树的序列化和反序列化

难度:困难
题目描述:

思路总结:终于又来了一道困难题,还是一样的酸爽,不过这题可以思路很简单的进行解决。

题解一:
pop(0)比较费时间,用iter——next,可以达到不错的效果,具体代码就不粘了,结果给一下。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Codec:

    def serialize(self, root):
        """Encodes a tree to a single string.
        
        :type root: TreeNode
        :rtype: str
        """
        def predfs(node, res):
            if not node:
                res += "None,"
            else:
                res += str(node.val) +","
                res = predfs(node.left, res)
                res = predfs(node.right, res)
            return res
        return predfs(root, "")

    def deserialize(self, data):
        """Decodes your encoded data to tree.
        
        :type data: str
        :rtype: TreeNode
        """
        def helper(l):
            if l[0] == "None":
                l.pop(0)
                return None
            cur = TreeNode(l.pop(0))
            cur.left = helper(l)
            cur.right = helper(l)
            return cur
        data = data.split(",")
        return helper(data)
#iter改进后的helper函数
		def helper():
            tmp = next(l)
            if tmp == "None":
                return None
            cur = TreeNode(tmp)
            cur.left = helper()
            cur.right = helper()
            return cur

# Your Codec object will be instantiated and called as such:
# codec = Codec()
# codec.deserialize(codec.serialize(root))

题解一结果:
在这里插入图片描述
改进后:空间使用增大,时间减半。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值