题解 | #序列化二叉树#
序列化二叉树
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
海康威视公司福利 1216人发布
查看11道真题和解析