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