题解 | #序列化二叉树#

序列化二叉树

https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84

 序列化和反序列化,意味着做一个可逆变换。可逆变换也就是一一映射,保留所有的原始信息,都要序列化 。
用层次遍历。
序列化的时候:注意数值转换为字符。
反序列化的时候:逐次遍历字符串解绑后的数组,对栈循环,数组是none,就不操作,不是none就作为栈弹出的结点的左结点或右结点。用栈添加下一层。
class Solution:
    def Serialize(self, root):
        if not root:
            return ","
        que = []
        que.append(root)
        res = []
        while que:
            node = que.pop(0)
            if node:
                res.append(str(node.val))
                que.append(node.left)
                que.append(node.right)
            else:
                res.append("none")
        return ",".join(res)

    def Deserialize(self, s):
        if s == ",":
            return
        vals, i = s.split(","), 1
        root = TreeNode(int(vals[0]))
        queue = []
        queue.append(root)
        while queue:
            node = queue.pop(0) # 弹出
            if vals[i] != "none": # i遍历完整个数组,先添加到左,再添加到右。i已经对应好了的。
                node.left = TreeNode(int(vals[i]))
                queue.append(node.left)
            i += 1
            if vals[i] != "none":
                node.right = TreeNode(int(vals[i]))
                queue.append(node.right)
            i += 1
        return root


全部评论

相关推荐

07-03 16:02
门头沟学院 Java
点赞 评论 收藏
分享
牛客83700679...:简历抄别人的,然后再投,有反馈就是简历不行,没反馈就是学历不行,多投多改只要技术不差机会总会有的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务