题解 | #序列化二叉树#

序列化二叉树

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-08 10:39
一个证都没 我能填什么
程序员小白条:别人有,你为什么没有,还是这个道理,社会就是比较,竞争,淘汰,你要安逸,那么就要做好淘汰的准备
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-03 18:13
点赞 评论 收藏
分享
06-28 22:48
已编辑
广东金融学院 Java
小浪_Coding:学院本+这俩项目不是buff叠满了嘛
点赞 评论 收藏
分享
07-07 12:47
门头沟学院 Java
码农索隆:竟然还真有卡体检报告的
点赞 评论 收藏
分享
这算盘打的
程序员小白条:都这样的,都是潜规则,你自己说可以实习一年就行了,实习可以随便跑路的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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