题解 | #序列化二叉树#
序列化二叉树
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