三个月算法进阶--day67
目录
层序遍历
广搜
记录
leetcode剑指offer第37题序列化二叉树
class Codec:
def serialize(self, root):
"""Encodes a tree to a single string.
:type root: TreeNode
:rtype: str
"""
if not root:
return ""
queue = collections.deque()
queue.append(root)
ans = [str(root.val)]
while queue:
node = queue.pop()
if node.left != None:
queue.appendleft(node.left)
ans.append(str(node.left.val))
else:
ans.append("null")
if node.right != None:
queue.appendleft(node.right)
ans.append(str(node.right.val))
else:
ans.append("null")
index = 0
for i in range(len(ans)):
if ans[i] != "null":
index = i
return "[" + ",".join(ans[:index+1]) + "]"
def deserialize(self, data):
"""Decodes your encoded data to tree.
:type data: str
:rtype: TreeNode
"""
if not data:
return
data = data.strip('[]').split(',')
root = TreeNode(int(data[0]))
queue = collections.deque()
queue.append(root)
start = 1
while queue:
node = queue.pop()
if start == len(data):
break
if data[start] != "null":
node.left = TreeNode(int(data[start]))
queue.appendleft(node.left)
start += 1
if start == len(data):
break
if data[start] != "null":
node.right = TreeNode(int(data[start]))
queue.appendleft(node.right)
start += 1
if start == len(data):
break
return root
class Codec:
def serialize(self, root):
if not root: return "[]"
queue = collections.deque()
queue.append(root)
res = []
while queue:
node = queue.popleft()
if node:
res.append(str(node.val))
queue.append(node.left)
queue.append(node.right)
else: res.append("null")
return '[' + ','.join(res) + ']'
def deserialize(self, data):
if data == "[]": return
vals, i = data[1:-1].split(','), 1
root = TreeNode(int(vals[0]))
queue = collections.deque()
queue.append(root)
while queue:
node = queue.popleft()
if vals[i] != "null":
node.left = TreeNode(int(vals[i]))
queue.append(node.left)
i += 1
if vals[i] != "null":
node.right = TreeNode(int(vals[i]))
queue.append(node.right)
i += 1
return root