剑指 Offer 37. 序列化二叉树
题目:请实现两个函数,分别用来序列化和反序列化二叉树。 困难
你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。
方法:层序遍历 时间复杂度O(n) 空间复杂度O(n)
层序遍历能保证二叉树的唯一性
class Codec: def serialize(self, root): """Encodes a tree to a single string. :type root: TreeNode :rtype: str """ if root is None: return '' res = '' queue = [root] res += str(root.val) + ' ' while queue != []: size = len(queue) for i in range(size): cur = queue.pop(0) if cur.left: queue.append(cur.left) res += str(cur.left.val) + ' ' else: res += '# ' if cur.right: queue.append(cur.right) res += str(cur.right.val) + ' ' else: res += '# ' return res def deserialize(self, data): """Decodes your encoded data to tree. :type data: str :rtype: TreeNode """ if data == '': return None node_list = data.split() length = len(node_list) head = TreeNode(node_list[0]) queue = [head] j = 1 while queue != []: size = len(queue) for i in range(size): cur = queue.pop(0) if j < length and node_list[j] != '#': node = TreeNode(int(node_list[j])) cur.left = node queue.append(node) j += 1 if j < length and node_list[j] != '#': node = TreeNode(int(node_list[j])) cur.right = node queue.append(node) j += 1 return head

浙公网安备 33010602011771号