题解 | #序列化二叉树#

序列化二叉树

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

关键点: 
1 理解题目,只需要将一个root先序列化,然后再反序列化,序列化的结果不作要求
2 使用同样的前序遍历,在反序列化时,要注意,self.index必须是全局共享的,这样才能保证按照顺序构建



# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def __init__(self):
        self.index = 0
        self.s = ""
    def SerializeFunction(self, root):
        #空节点
        if not root:
            self.s += '#'
            return
        #根节点
        self.s += (str)(root.val) + '!'
        #左子树
        self.SerializeFunction(root.left)
        #右子树
        self.SerializeFunction(root.right)
     
    def Serialize(self, root):
        if not root:
            return '#'
        self.SerializeFunction(root)
        return self.s

    def DeserializeFunction(self, s):
        if self.index == len(s) or s[self.index] == '#':
            self.index += 1
            return
        val = 0
        while self.index<len(s) and s[self.index] != '!':
            val = val * 10 + int(s[self.index])
            self.index += 1
        root = TreeNode(val)
        if self.index == len(s):
            return root
        else:
            self.index += 1
        root.left = self.DeserializeFunction(s)
        root.right = self.DeserializeFunction(s)
        return root

    def Deserialize(self, s):
        if s == '#': return 
        root = self.DeserializeFunction(s)
        return root

全部评论

相关推荐

程序员饺子:正常 我沟通了200多个 15个要简历 面试2个 全投的成都的小厂。很多看我是27直接不会了😅
点赞 评论 收藏
分享
那一天的Java_J...:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 17:13
想去,但是听说加班强度实在难崩,所以拒绝了,现在有点心梗对面hr感觉也是实习生,打电话的时候怪紧张的,但是感觉人很好嘞
水中水之下水道的鼠鼠:哥们这不先去体验一下,不行再跑呗,大不了混个实习经历(有更好的转正offer就当我没说)
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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