题解 | #序列化二叉树#
序列化二叉树
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
查看16道真题和解析